前端面试之路

react 面试基本要点以及考点

2019-11-20  本文已影响0人  ybrelax

setState什么时候是同步的,什么时候是异步的

setState的原理:
在React中,如果是由React引发的事件处理(比如通过onClick引发的事件处理),调用setState不会同步更新this.state,除此之外的setState调用会同步执行this.state。所谓“除此之外”,指的是绕过React通过addEventListener直接添加的事件处理函数,还有通过setTimeout/setInterval产生的异步调用。

原因:在React的setState函数实现中,会根据一个变量isBatchingUpdates判断是直接更新this.state还是放到队列中回头再说,而isBatchingUpdates默认是false,也就表示setState会同步更新this.state,但是,有一个函数batchedUpdates,这个函数会把isBatchingUpdates修改为true,而当React在调用事件处理函数之前就会调用这个batchedUpdates,造成的后果,就是由React控制的事件处理过程setState不会同步更新this.state。

异步处理的时候

image.png
https://reactjs.org/docs/faq-state.html#when-is-setstate-asynchronous

react 事件机制

react 与 vue的对比
react
1 函数式思想,all in js ,jsx语法,js操控css
2 单项数据流
3 setState重新渲染
4 每当应用的状态被改变时,全部子组件都会重新渲染。当然,这可以通过shouldComponentUpdate这个生命周期方法来进行控制,如果为true继续渲染、false不渲染,但Vue将此视为默认的优化。

vue
1 响应式思想,也就是基于数据可变的。把html、js、css、组合到一起,也可以通过标签引擎组合到一个页面中
2 双向绑定,每一个属性都需要建立watch监听(页面不用,涉及到组件更新的话需要)
3 Vue宣称可以更快地计算出Virtual DOM的差异,这是由于它在渲染过程中,会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树

上一篇下一篇

猜你喜欢

热点阅读