react 推荐的异步转同步
this.setState(state=>{
return {
xxx:state.xxx
}
this.setState((state) => {
return {
num: state.num + 1,
};
});
})
系统提供的函数中的this都是指向的实例对象
组件优化
1、减轻state
两种数据不需要放在state里面
1)、变化不会引起页面重新渲染的
2)、数据不会发生变化的
2、避免不必要的渲染
数据重复更新的时候 借助componentWillUnmount方法里面的参数newProp ,newState
对值进行对比,重读的可以不进行更新
3、纯组件
声明类组件的时候extneds React.PureComponent,会自动对state和prop进行比较
dom中的节点分类
文本节点
标签节点
属性节点
注释节点
虚拟dom:
就是用一个原生的js对象去描述一个dom节点,他只是真实Dom节点的一个抽象层、、
diff算法
核心逻辑
diff算法只发生在更新阶段,创建和销毁没有。
创建阶段,react根据jsx生成一个虚拟dom,再通过虚拟产生真实的Dom,最后真实的dom渲染到了页面上
更新解读那,react会出降一个新的虚拟dom(新的),新旧虚拟都没进行对比,找到新的虚拟dom和旧的虚拟dom的不一样的点。
找到之后再更新回旧的虚拟dom,,再将就的虚拟dom和新的真实节点不一样的额地方更新到
页面上
key的作用就是对每一个节点及您修改标记,方便后续新节点生成的时候比较的过程,
如果没有key的值 ,数组中新加入元素的时候,会挨个进行比较,如果是给数组第一个位置添加元素,再挨个进行比较的时候,所有的节点都不一样,需要摧毁重建
耗时比较多,有key值的话,就会直接比较key值有无相同的 ,有的话就不再摧毁重建,没有的话再进行重建
|