我在我的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/

10-12 13:12