响应式系统与React | 青训营笔记

53 阅读2分钟

响应式系统与React | 青训营笔记

这是我参与「第五届青训营 」笔记创作活动的第4天

一、React的设计思路

UI编程的痛点:

  1. 状态更新,UI不会自动更新,需要手动地调用DOM进行更新
  2. 欠缺基本的代码层面的封装和隔离,代码层面没有组件
  3. UI之间的数据依赖关系需要手动维护,如果依赖链路长,则会遇到回调地狱

响应式与转换式

转换式系统:给定输入求解输出,用于编译器、数值转换等

响应式系统:监听事件,消息驱动,用于监控系统、UI界面

image.png 响应式编程的特点:

  • 状态更新,UI自动更新
  • 前端代码组件化,可以复用和封装
  • 状态之间的互相依赖关系,只需声明即可

组件化

  • 组件是组件的组合/原子组件
  • 组件内拥有状态,外部不可见
  • 父组件可将状态传入组件内部
组件设计:
  1. 组件声明了状态和UI的映射
  2. 组件有Props/State两种状态
  3. "组件"可由其他组件拼装而成
组件代码的特点:
  1. 组件内部拥有私有状态State
  2. 组件接受外部的Props状态提供复用性
  3. 根据当前的State/Props,返回一个UI

状态归属问题

状态归属于两个节点的最近公共祖先节点

生命周期

image.png

二、React(hooks)的写法

image.png

image.png

三、React的实现

问题:

  1. JSX不符合JS的标准语法
  2. 返回的JSX发生改变时,如何更新DOM
  3. State/Props更新时,要重新触发render函数

虚拟DOM

image.png

diff算法

image.png

image.png

四、React状态管理库

核心思想:将状态抽离到UI外部进行管理

状态机:当前状态,收到外部事件,迁移到下一个状态