我在我的componentWillMount函数中发出一个ajax请求。我有一个状态变量。我将此变量的状态设置为ajax调用的响应。
this.setState({state_variable: response})
现在在我的componentDidMount函数中,我正在尝试console.log state_variable的值。理想情况下,我应该获得如上设置的state_variable的值作为响应。但是在控制台中,我看到值打印为空数组,这是state_variable的初始值。
为什么componentDidMount现在可以获取我设置的值?我究竟做错了什么
最佳答案
您的ajax调用通常位于componentDidMount中,而不是componentWillMount中。这样做的原因是,您不希望在未安装的组件中调用,并且假设在安装组件之前不返回数据。
我确定一切运行正常,您可能只是在componentWillMount ajax调用返回之前进行了日志记录。而不要这样做,请执行以下操作:
$.ajax({
// call parameters go here
}).then(function(response) {
this.setState({ state_variable: response });
})
now do your logging inside of render instead:
render() {
console.log(this.state.state_variable)
// normal render jsx here
}
setState调用完成后,render将重新执行,因此您应该获得一个良好的日志。
关于javascript - componentWillMount中的setState不反射(reflect)在componentWillMount中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46942601/