React框架学习笔记1 | 青训营

101 阅读2分钟

一、React概念

React是一个用于构建用户界面的JavaScript库

二、React的设计思路

  • 响应式编程
  • 组件化
  • 状态归属:React是单向数据流,只能是父组件给子组件传值,反向不能传值

三、React的生命周期

详解React新旧生命周期

React组件生命周期方法分为三类:挂载、更新和卸载 image.png

挂载

挂载是将组件添加到DOM的过程中,依次执行以下方法:

constructor
getDerivedStateFromProps(props,state)
render
componentDidMount

更新

组件已经在DOM中,但其props或state发生变化时的过程,依次执行以下方法:

getDerivedStateFromProps
shouldComponentUpdata
render
getSnapshotBeforeUpdate
componentDidUpdate

卸载

将组件从DOM中移除的过程组件会执行以下方法:

componentWillUnmount

四、React的特点

React知识讲解

  • 采用组件化模式,声明式编码,提高开发效率和组件复用性
  • 在React Native中可以用react预发进行安卓、ios移动端开发
  • 使用虚拟dom和diff算法,尽量减少与真实dom的交互,提高性能

五、React中的Diff算法

Diff算法讲解

Diff算法的作用:

渲染真实DOM的消耗很大,当修改数据时直接渲染到真实dom上会引起整个dom树的重绘和重排。diff算法可以实现只更新修改的那一小块dom,而不是整个dom。

diff算法的本质就是:找出两个对象之间的差异,目的是尽可能做到节点复用。

image.png *React Diff算法优化策略图

React中Diff算法的实现:

React采用虚拟DOM技术实现对真实DOM的映射,即React Diff算法的差异查找实质是对两个JavaScript对象的差异查找;

image.png

其中基于三个策略,react分别对tree diff,component diff,element diff进行了算法优化:

  • Web UI中DOM节点跨层级的移动操作特别少,可以忽略不计。(tree diff)
  • 拥有相同类的两个组件将会生成相似的树形结构,拥有不同类的两个组件将会生成不同的树形结。(component diff)
  • 对于同一层级的一组子节点,它们可以通过唯一ID进行区分。(element diff)