setState()的使用注意:
1.不要直接修改state
例:this.state.count = 2;
这是个错误的写法,react组件并不会渲染更新
正确用法:
this.setState({count:2})
2.state在React的合成事件中更新是异步的
出于性能考虑,react会将多个setState()合并成一个调用,通过异步的方式批量进行更新
,下面是测试的代码,我们可以看一下输出的结果
当我第一次点击时,调用了handleChangeCount的方法,然后调用this.setState进行更新,而这个count值不会里面进行更新,所以第一次console.log输出的值是0而不是1,所以我们可以得出结论此时state的一个更新是一个异步的
如果我们想获取最新的count值,我们可以通过回调的方式来获取到最新的count值
输出的结果看下图
3.state在setTimeOut和原生事件中是同步的
(1)setTimeout测试: 使用setTimeout输出的结果如下 (2)原生事件测试: 使用原生事件输出结果如下
结论:setState只有在react合成事件和生命周期函数中是异步的,在setTimeout和原生事件中是同步的