面试:react(三)

1. react中setState是同步还是异步?什么时候同步?什么时候异步?

setState既可以同步,也可以异步。
在合成事件和声明周期函数中,setState是异步;
原生事件和 setTimeout 中都是同步的。
合成事件:就是react 在组件中的onChange,onClick,onTouchMove等都是属于它自定义的合成事件
原生事件:比如通过addeventListener添加的,dom中的原生事件

参考:https://www.jianshu.com/p/799b8a14ef96?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

2. react怎么控制同步还是异步?

在React的setState函数实现中,会根据一个变量 isBatchingUpdates 判断是直接更新this.state还是放到队列中延时更新。
isBatchingUpdates默认值是false,表示setState会同步更新this.state;
还有一个函数,batchedUpdates,该函数会把isBatchingUpdates修改为true,在React调用事件处理函数之前就会先调用batchedUpdates将isBatchingUpdates修改为true;
这样React控制的事件处理过程setState不会同步更新this.state.

3. react更新页面的方式?

1.setState
2.dispatch action
3.操作原生dom
4.forceUpdate
5.Context

https://blog.csdn.net/u010377383/article/details/79407241

4、什么叫合成事件

如果react事件绑定在了真实DOM节点上,一个节点同事有多个事件时,
页面的响应和内存的占用会受到很大的影响。因此SyntheticEvent作为
中间层出现了。
事件没有在目标对象上绑定,而是在document上监听所支持的所有事件,当事件发生并冒泡至document时,react将事件内容封装并叫由真正的处理函数运行。 

  

原文地址:https://www.cnblogs.com/liumcb/p/14031005.html