【问题标题】:setState does not update statesetState 不更新状态
【发布时间】:2018-12-18 19:17:43
【问题描述】:

为什么 this.setState 不起作用。

constructor(props) {
 super(props);
 this.state ={
    obj: [],
 }
 }
 ,


componentDidUpdate(prevProps){
const { obj } = this.props;
  this.setState({obj});
}
}

【问题讨论】:

  • 尝试控制台日志this.props.siteDataState
  • 永远不要在componentDidUpdate中无条件使用setState
  • 没有道具siteDataState

标签: javascript reactjs setstate


【解决方案1】:

如果您查看您的开发控制台,当该控制台日志应该发生时,您会看到一个错误,因为您使用的是“正常”功能,没有任何类型的 this 保存。相反,一旦该函数被调用,this 标识符将引用全局上下文(例如 window),而不是您的组件。

使用箭头函数确保this 是您实际 的意思,您会发现setState 工作得很好:

componentDidUpdate(prevProps){
  this.setState({
    siteDataState: this.props.siteData
  }, () => {
    console.log(this.state.siteDataState);
  });
}

也就是说,这将是级联触发,因为您正在更改组件在组件更改时触发的函数中,因此在其中放置一些if 代码以确保this.state.siteDataState 还不是已经this.props.siteData 中的内容。

【讨论】:

  • 当然,但这对我不起作用,你可以在没有回调的情况下进行测试吗,我使用回调只是为了调试数据,我需要更新统计数据
  • 所以做一些基本的调试:向自己证明this.props 的内容可以通过将componentDidUpdate 设为一行代码来实际提取:console.log(this.props)。它甚至具有您试图重新绑定到状态的价值吗? (另外,如果你已经把它作为道具传递了,你为什么要把它添加到 state 中?只需引用 this.props.siteData 而不是 this.state.siteDataState。没有充分的理由重新绑定它)
猜你喜欢
  • 2019-05-31
  • 2021-01-28
  • 2018-04-08
  • 1970-01-01
  • 2021-10-02
相关资源
最近更新 更多