是否有理由在循环中调用setSate()
会阻止它多次更新状态?
我有a very basic jsbin本书突出了我所看到的问题.有两个按钮.其中一个将州计数器更新1.另一个调用循环中的一个的底层函数——这似乎会多次更新状态.
我知道解决这个问题的几种方法,但我想确保我首先理解了这里的基本机制.为什么不能在循环中调用setState
?我是不是把它编得很笨拙,妨碍了预期的效果?
是否有理由在循环中调用setSate()
会阻止它多次更新状态?
我有a very basic jsbin本书突出了我所看到的问题.有两个按钮.其中一个将州计数器更新1.另一个调用循环中的一个的底层函数——这似乎会多次更新状态.
我知道解决这个问题的几种方法,但我想确保我首先理解了这里的基本机制.为什么不能在循环中调用setState
?我是不是把它编得很笨拙,妨碍了预期的效果?
从React Docs人中:
setState()
对组件状态的更改进行排队,并告知React需要使用更新的状态重新呈现此组件及其子组件.这是更新用户界面以响应事件处理程序和服务器响应的主要方法.将
setState()
视为更新组件的请求,而不是即时命令.为了更好地感知性能,React可能会延迟它,然后在一次过程中更新几个组件.React不保证立即应用状态更改.
setState()
并不总是立即更新组件.它可能会批处理更新或将更新推迟到以后.这就使得拨打setState()
后立即阅读this.state
成为一个潜在的trap .
基本上,不要循环调用setState
.这里发生的事情正是文档所指的:this.state
正在返回之前的值,因为挂起的状态更新尚未apply.