同步异步探讨
关于setState附上官网地址一份
其实探讨是否是同步还是异步这个问题很好理解,可结合EventLoop来参照
- 能紧随其后拿到结果的可以认为同步(简单理解哈,一些场景暂不考虑,就像有一些属于异步的但是异步任务刚好都结束了,直接拿到了对应的结果等)
- 至于异步,他添加在异步队列,不影响同步任务的执行,在所有的同步任务执行完它才会按照顺序开始执行队列里面的任务,有一个等待的过程
而setState它是属于异步任务,试想一下,如果它是同步更新的,那我们每次setState一次就更新会浪费多少渲染消耗,一个页面可能十来个就要渲染十几次,无疑浪费性能开销。所以他设计成了异步任务,将其统一添加到异步队列里面,等待所有的函数等同步任务执行完之后,统一执行setstate更新状态,就像vue的异步事件队列一样。nexttick的设计也是利用这种思想来设计,利用新开启的异步队列延迟执行
setState使用
基本使用
这只是简单的赋值,但是我们是不能直接在下面拿到count的值为10 的
add () {
this.setState({
count:10
})
// 这里拿不到
console.log(this.state