响应式系统与React | 青训营

47 阅读3分钟

1.react的历史与应用

应用:

(1)前端应用开发,例如Netflix网页版、FaceBook、Instagram等 (2)移动原生应用开发、比如Instagram、Discord、Oculus (3)结合Electron进行应用桌面开发 (4)用React语法书写3D图形的构造

历史:

2010FaceBook的xhp框架,启发了React设计 2011年创建了react原型 2012年创建了React

2.React的设计思路

UI编程的痛点

1.状态更新,UI不会自动更新,需要手动调用DOM,然后进行更新 2.缺乏基本的代码层面的封装和隔离,代码层面没有组件化 3。UI之间的数据依赖关系需要手动去维护,可能遇到“Callback Hell”;

转换式系统与响应式系统

转换式系统:通过给定的输入,求得输出,比如编译器编译代码,和数值计算过程; 响应式系统:作用为监听消息、消息驱动,比如监控系统和UI界面,当事件发生变化时,做出一系列反应;

响应式编程

前端UI编程思路为 事件->执行既定回调->状态更新->UI更新 这样的话吗,会有以下优点:

QQ截图20230814184315.jpg

组件化

QQ截图20230814184559.jpg

QQ截图20230814190426.jpg

生命周期

QQ截图20230814190654.jpg

3.React (hooks)的写法与 React 实现

代码举例: 其中document.title='YOU CLICKED {count} times'就是改变,title标题 故需要使用useEffect来消除其副作用

React的写法:

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

Problem1

QQ截图20230814204350.jpg

problem2

QQ截图20230814204525.jpg

vitual Dom是一种用于和真实的DOM同步,而在JS内存中维护的一个对象,他与DOM有着类似的树状结构,并在DOM可以建立一一对应的联系;

它赋予了REACT声明式的API:你可以告诉React希望让Ui是什么状态,React就确保DOm匹配该状态。这使你可以从属性操作、事件处理和手动Dom更新这些再构建应用程序时必要的操作中解放出来;

我们看下面这张图,

QQ截图20230814205818.jpg 有一个Vitual DOM,还有一个真实的DOM,假设红色的组件发生了变化,那么我们来计算他的diff,Vitual返回的JSX需要与原来的DOM做一个diffing,通过递归的方式,其子树需要全部执行一遍;注意,在此过程中,我们需要去权衡更新次数和计算速度

How to Diff

1.完美的最小Diff算法,需要O(N^3)的复杂度,牺牲理论最小diff,换取时间,得到了O(n)复杂度的算法; 2.diff遵循的三条规则: 不同类型的元素,使用替换 相同类型的DOM元素,使用更新 同种类型的组件元素,使用递归

React状态管理库与应用级框架科普

1. React 状态管理库 - 核心思想

2. React 状态管理库 - 推荐

3. React 状态管理库 - 状态机

4. React 状态管理库 - Modern.js/Reduck

5. 应用级框架科普