setState是异步的,原因如下:
1、可能会一次性执行多次的setState,因为你无法限制用户如何使用setState
2、没必要每次setState都重新渲染,要考虑性能
3、即便每次重新渲染,用户也不会看到中间效果,所以只需要看到最后的结果
Vue的数据改变也是异步的,object.defineproperty中的set函数当数据改变的时候set中执行updateComponent(这个方法是异步的),set不是异步的
setState过程:
1、每个组件实例,都有renderComponent方法
2、执行renderComponent方法会重新执行实例的render
3、render函数返回newVnode,然后储存成preVnode
4、执行patch(preVnode, newVnode)