为什么不能改变原有state

  • 为什么不能改变原有state,需要使用setState并传入修改的部分state,执行setState后怎么更新

    是否调用render进行再次渲染是由state是否变化决定的。setState本质是通过一个队列机制实现state更新的,执行setState时,会将要更新的state合并后放入状态队列,而不会立刻更新state,队列机制可以批量更新state。如果不通过setState而直接修改this.state,那么这次state的变化不会放入状态队列中,下次调用setState再进行状态队列进行合并时,会忽略之前直接直接对state修改,这样就无法合并到这次变化,实际也就没有将想要的state更新上去。setState是异步的。

    只要调用了setState,就会在合并后生成一个新的state,只要判断state指向的是否是同一个内存地址就知道state是否发生了变化,以此来决定是否进行render重新渲染。如果不用这种方式都直接操作this.state,也就是同一块内存,要侦测state是否发生变化(如angular中的deepwatch)来决定是否重新渲染会非常复杂和低效。redux的reducer中返回新的对象也是同理。react状态管理库还有redux-sagas、redux-observable、MobX等。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容