一、React概念
React是一个用于构建用户界面的JavaScript库
二、React的设计思路
- 响应式编程
- 组件化
- 状态归属:React是单向数据流,只能是父组件给子组件传值,反向不能传值
三、React的生命周期
React组件生命周期方法分为三类:挂载、更新和卸载
挂载
挂载是将组件添加到DOM的过程中,依次执行以下方法:
constructor
getDerivedStateFromProps(props,state)
render
componentDidMount
更新
组件已经在DOM中,但其props或state发生变化时的过程,依次执行以下方法:
getDerivedStateFromProps
shouldComponentUpdata
render
getSnapshotBeforeUpdate
componentDidUpdate
卸载
将组件从DOM中移除的过程组件会执行以下方法:
componentWillUnmount
四、React的特点
- 采用组件化模式,声明式编码,提高开发效率和组件复用性
- 在React Native中可以用react预发进行安卓、ios移动端开发
- 使用虚拟dom和diff算法,尽量减少与真实dom的交互,提高性能
五、React中的Diff算法
Diff算法的作用:
渲染真实DOM的消耗很大,当修改数据时直接渲染到真实dom上会引起整个dom树的重绘和重排。diff算法可以实现只更新修改的那一小块dom,而不是整个dom。
diff算法的本质就是:找出两个对象之间的差异,目的是尽可能做到节点复用。
*React Diff算法优化策略图
React中Diff算法的实现:
React采用虚拟DOM技术实现对真实DOM的映射,即React Diff算法的差异查找实质是对两个JavaScript对象的差异查找;
其中基于三个策略,react分别对tree diff,component diff,element diff进行了算法优化:
- Web UI中DOM节点跨层级的移动操作特别少,可以忽略不计。(tree diff)
- 拥有相同类的两个组件将会生成相似的树形结构,拥有不同类的两个组件将会生成不同的树形结。(component diff)
- 对于同一层级的一组子节点,它们可以通过唯一ID进行区分。(element diff)