![](/img/trans.png)
[英]REACT NATIVE - this.setState doesn't work inside onChangeText
[英]React Native - setState doesn't work in constructor
这是我的代码:
我想设置函数结果,将它们作为对某些状态变量的承诺,但是在then()函数中使用this.setState之后,它似乎返回空对象! 我检查了then()块,它包含了应该包含的数据。
class ProfileScreen extends Component{
constructor(props){
super(props);
this.state = {
profile_data: {},
user_data: {}
};
this._getUserData().then(response => {
this.setState({user_data: response});
});
//Empty Results
console.log(this.state.user_data);
this._getProfileData(this.state.user_data.id).then(response => {
this.setState({profile_data: response});
})
}
}
首先, 永远不要在使用setState的构造函数中设置状态,因为对setState
的调用会导致重新渲染尚未构建的视图层次结构。
更好的方法是componentDidMount
因为这是一个生命周期回调,可确保DOM已经被渲染一次,现在您可以更新状态以查看视图中的更改。
对于您的问题,空结果是由于setState
本质上是异步的,因此,即使setState更新了状态, console.log
也会运行。
您应该依赖setState
的第二个参数,该参数是在状态更新后运行的回调。
this.setState({
user_data: response
}, () => {
console.log(this.state.user_data);
})
不要在构造函数中执行此操作。 在
componentDidMount
获取用户详细信息,然后根据需要设置状态
除了Suraj所说的以外,如果_getUserData
是异步的,也许正在执行AJAX调用,则_getProfileData
必须位于_getProfileData
回调内部.then
因为您依赖于user_data
来获取profile_data
。
试试这个小吃: https : //snack.expo.io/@transfusion/stackoverflow-53694220
仅将承诺链接在一起可能会更清洁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.