setState机制总结

1.setState异步更新

  • 不要直接修改state
    调用setState不会直接修改当前的state,而会将改变放入更新队列,队列机制可以高效地批量更新state,减少渲染次数
    直接修改state则不会调用render重新渲染组件,理论上是可以改变state的属性的,但是后面的setState可能会将其覆盖,使用时应该将其作为常量
  • setState的状态更新是异步的
    不能依赖于当前state和props的值,来计算下一个状态,应为状态更新是异步的,并不知道执行时的状态,应该为setState传入改变的回调函数
  • setState不能在shouldComponentUpdate或componentWillUpdate中调用setState,则会造成循环调用,将浏览器的内存占满后崩溃

    推荐阅读