持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情juejin.cn/post/714765…
- 做项目中,用到了很多的
setState,而且也被问过setState的实现原理,今天给大家介绍一下setState。 - setState主要用在Recat的
类式组件中,只要用来修改组件中的状态,状态一更新,组件就会重新渲染生成新的VDOM挂载到页面。 - setState有
两个参数,第一个参数用来修改状态,第二个参数是callback,callback会在状态更新,且组件也更新之后执行。 - setState其实主要是把第一个参数的对象与状态里的对象进行了合并,从而使状态更新,因为对象合并有重名属性后面的会覆盖前面的。
第一个参数原本其实也是一个函数,接收一个参数就是state,人会返回一个对象,该对象会和state进行合并。下面给上代码:
上面的代码,当我们点击
test按钮的时候,count会+1。
而我们平时都会简写,简写的话setState里直接写一个对象,给大家上图比较一下:
这两张图其实得到的结果都是一样的,点击按钮count+1。
并且如果在test1或者test2里输出count的话,得到的会一直是上一次没有更新后的值,因为setState再同步任务中是异步的,是会先输出同步任务,再去执行异步的。可以给test1事件设置第二个参数,就是callback,在他里面输出的话得到的就是更新后的值。
- 它是异步的原因是,如果有大量的修改状态,不设置成同步的话,状态有时候可能更新需要很长时间,它更新不完,组件就无法更新,组件更新不了,那么页面就无法更新。
- 而在异步任务中它又是同步的,是因为它外层的事件已经是异步的了,所以它是否为异步任务已经对其他任务没有影响了。
- 其实如果是在react的事件回调中,它是异步的,如果在原生事件回调里,setState是同步的。 以上是我做的简单总结。大家有需要的话可以参考一下。