React Axios 在 setState 之后不渲染
React Axios not rendering after setState
我的登录组件有问题,我使用的是 cointainer 模式,所以我有一个管理 api 调用的登录组件和一个管理输入并警告用户的 DumbLogin关于我的服务器的响应。
我正在使用 Axios 进行 api 调用,它使用 promises 来做到这一点,我还使用箭头函数来避免与此相关的麻烦,这就是我的想法......
因为最后我有
TypeError: _this.setState is not a function
我尝试使用变量 self 来解决这个问题,但结果是同样的错误。
我该怎么办?
axios(all)
.then((response) => {
console.log(response);
if (response.status === 200){
this.setState({
...this.state,
spin: false,
});
let data = response.data;
this.props.connect(data.username, data.email, data.token, data.partners);
this.props.router.push('panel');
}
}).catch((error) => {
console.log(error.response);
this.setState({
spin: false,
errorLogin: 'Username or password wrong',
});
});
(spin 是一个布尔值,用于通知 DumbLogin 在等待我的服务器响应时是否应该显示微调器)
因为then
里面的匿名函数里面的this
不是React组件的this
您需要为执行 ajax 调用的函数绑定正确的 this
(Reac 组件的 this)。
例如。如果函数是:
fetchData(){
axios(all).then(...).catch(...)
}
你可以在构造函数中绑定它:
constructor(){
this.fetchData = this.fetchData.bind(this)
}
然而!
这不是推荐的解决方案,您通常不想 ajax 在组件中调用...为此您可能需要 redux、mobx 甚至 redux-saga
我的登录组件有问题,我使用的是 cointainer 模式,所以我有一个管理 api 调用的登录组件和一个管理输入并警告用户的 DumbLogin关于我的服务器的响应。 我正在使用 Axios 进行 api 调用,它使用 promises 来做到这一点,我还使用箭头函数来避免与此相关的麻烦,这就是我的想法...... 因为最后我有
TypeError: _this.setState is not a function
我尝试使用变量 self 来解决这个问题,但结果是同样的错误。
我该怎么办?
axios(all)
.then((response) => {
console.log(response);
if (response.status === 200){
this.setState({
...this.state,
spin: false,
});
let data = response.data;
this.props.connect(data.username, data.email, data.token, data.partners);
this.props.router.push('panel');
}
}).catch((error) => {
console.log(error.response);
this.setState({
spin: false,
errorLogin: 'Username or password wrong',
});
});
(spin 是一个布尔值,用于通知 DumbLogin 在等待我的服务器响应时是否应该显示微调器)
因为then
里面的匿名函数里面的this
不是React组件的this
您需要为执行 ajax 调用的函数绑定正确的 this
(Reac 组件的 this)。
例如。如果函数是:
fetchData(){
axios(all).then(...).catch(...)
}
你可以在构造函数中绑定它:
constructor(){
this.fetchData = this.fetchData.bind(this)
}
然而!
这不是推荐的解决方案,您通常不想 ajax 在组件中调用...为此您可能需要 redux、mobx 甚至 redux-saga