今天,我使用了setState设置state没有更新,整理了一下:
1、setState函数是异步函数,setState()
方法通过一个队列机制实现state
更新,当执行setState()
的时候,会将需要更新的state
合并之后放入状态队列,而不会立即更新this.state
(可以和浏览器的事件队列类比)。如果我们不使用setState
而是使用this.state.key
来修改,将不会触发组件的re-render
。如果将this.state
赋值给一个新的对象引用,那么其他不在对象上的state
将不会被放入状态队列中,当下次调用setState()
并对状态队列进行合并时,直接造成了state
丢失。
2、解决办法:
(1)this.setState(obj,ckb);
(2)直接使用this.state.obj
但是一般清空下不要使用this.state来改变state里面的值,因为这样会覆盖掉state初始化的值,并且不会重新渲染组件,如果需要重新渲染组件,可以这样加上这个: