当前位置: 首页 > 面试题库 >

循环调用setState仅更新状态1次

洪景铄
2023-03-14
问题内容

是否有原因setSate()在循环中调用会阻止其多次更新状态?

我有一个非常基本的jsbin,突出了我所看到的问题。有两个按钮。一个将状态计数器更新为1。另一个在循环中调用One的基础函数-
似乎将多次更新状态。

我知道此问题的几种解决方案,但我想确保首先了解这里的基本机制。为什么不能setState循环调用?我是否笨拙地编写了代码,以至于无法达到预期的效果?


问题答案:

从React Docs:

setState()不会立即更改this.state,但会创建一个挂起的状态转换。调用此方法后访问this.state可能会返回现有值。无法保证对setState的调用的同步操作,并且可能会为提高性能而批量调用。

基本上,不要setState循环调用。这里发生的事情恰恰是文档所指的:this.state由于尚未应用暂挂状态更新,因此正在返回先前的值。



 类似资料:
  • 我有3个div。当我点击特定的按钮时,每个人都会有类活动。它们的每个div都有一个状态变量,每当它是真的时,我都会向连接到它的div添加class Name='active': 当我点击按钮时,状态改变,但是div没有激活类 当我将函数更改为此时,它会工作: ================================================ =====================

  • 我正在创建一个应用程序,用户可以在其中设计自己的表单。例如。指定字段的名称和应包含的其他列的详细信息。 该组件在此处作为JSFiddle提供。 我的初始状态如下: 我想在用户更改任何值时更新状态,但我很难定位正确的对象: 我应该如何制作这个。setState以使其更新?

  • 所以我有这个: 只是一个数组的数字例如然而没有给出正确的总数,但?我甚至放了一个超时延迟,看看这是否解决了问题。任何明显的还是我应该发布更多的代码?

  • 我正在创建一个应用程序,用户可以在其中设计自己的表单。例如。指定字段的名称以及应包括的其他列的详细信息。 该组件在这里可以作为JSFiddle使用。 我最初的状态是这样的: 如何创建以使其更新?

  • 问题内容: 所以我有这个: newDealersDeckTotal只是一个数字数组,例如,但是没有给出正确的总数,但是呢?我什至设置了超时延迟,以查看是否可以解决问题。任何明显的还是我应该发布更多代码? 问题答案: 通常是异步的,这意味着在您处于状态时,它尚未更新。尝试将日志放入方法的回调中。状态更改完成后执行:

  • 问题内容: 我觉得我已经在阳光下尝试了所有东西,但是一定缺少一些非常明显的东西。在下面,我试图将一个新项目推入数组并更新状态,但是无论我做什么,状态都不会从初始数组更改。 当我console.log newListItems时,新项目就包括在内,因此到目前为止所有工作都在进行,它是不会更新的实际状态。我想念什么? addItem方法: 我也没有在控制台中收到任何错误消息。 完整代码: 问题答案: