React setState 没有得到更新

Posted

技术标签:

【中文标题】React setState 没有得到更新【英文标题】:React setState is not getting updated 【发布时间】:2020-06-30 10:50:24 【问题描述】:

我在我的 react 项目中添加了以下代码,以使用方法的响应设置状态。但状态从未更新。它始终为空。我可以知道如何在这里设置状态

_onload():any
    this._DataAccessObj = new DataAccess();
    let result = this._DataAccessObj.getRequest(this.props.itemId).then((item:IRequest) =>
       console.log("item");
       console.log(item);
        this.setState (
       Request: item
        );
       console.log(this.state.Request);
       console.log("setstate");

   );
   return;
  

【问题讨论】:

这是什么? ReactJS 还是 React Native? 通过您的 console.log,您知道它是 null 吗? setState 是异步的,如果您在该 console.log 中看到它为 null 就可以了。尝试调用 setState 的回调。 【参考方案1】:

来自documentation的ReactJS和生命周期:

浏览器每秒调用一次 tick() 方法。在里面,时钟 组件通过使用对象调用 setState() 来安排 UI 更新 包含当前时间。感谢 setState() 调用,React 知道状态已经改变,并再次调用 render() 方法 了解屏幕上应该显示的内容。这一次,this.state.date 在 render() 方法会有所不同,因此渲染输出将 包括更新时间。 React 会相应地更新 DOM。

最后一部分很重要:实际状态对象将在稍后更新,而不是在调用 setState 方法时直接更新。

On the same page:

React 可以将多个 setState() 调用批处理到单个更新中 性能。

因为 this.props 和 this.state 可能是异步更新的,所以你 不应依赖它们的值来计算下一个状态。

【讨论】:

以上是关于React setState 没有得到更新的主要内容,如果未能解决你的问题,请参考以下文章

我从 React 得到一个错误:超过最大更新深度

React-无法读取未定义的属性“setState”

ReactJS:setState值不更新[重复]

react setState 回调没有更新状态

setState 没有更新 React 中的设置值 [重复]

React setState hook 之前的 param 对象给出了不一致的值