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

75 阅读3分钟

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

响应式系统与 React

课程内容概要

  1. React的历史与应用
  2. React的设计思路
  3. React的写法与实现
  4. React状态管理库

一、React的历史与应用

(一)React的历史

1.2010-2012 屏幕截图(3047).png 2.2013年React正式开源,在2013JSCconf上Jordan Walke介绍了这款框架。 3.2014-今天

屏幕截图(3049).png

(二)React的应用

屏幕截图(3046).png

二、React的设计思路

(一)、UI编程痛点

1.状态更新,UI不会自动更新,需要手动调用DOM进行更新。 2.欠缺基本的代码层面的封装隔离,代码层面没有组件化。 3.UI之间的数据依赖需要手动维护,如果链路过长会遇到“Callback Hell”。

(二)、响应式与转换式

屏幕截图(3052).png

在原有前端UI的状态变更后面增加 状态变更 UI同时变更完成响应式变更 屏幕截图(3054).png 1.响应式编程.

状态更新,UI自动更新 (“状态更新,UI不会自动更新,需要手动低啊用DOM进行更新”)

前端代码组件化,可复用,可封装. (“欠缺基本的代码层面的封装和隔离,代码层面没有组件化”)

状态之间的互相依赖关系,只需声明即可。 (“UI之间的数据依赖关系,需要手动维护,如果依赖链路长会遇到“Callback Hell””) 屏幕截图(3066).png (2).状态归属问题 例如苹果官网订购页面“当前价格属于Root节点”

屏幕截图(3059).png 屏幕截图(3061).png OnChangValue向下传递 屏幕截图(3060).png 状态归属于两个节点中最原始的节点

React是单向数据流。

(三)、组件化

组件代码会是什么样子?

屏幕截图(3065).png

组件设计:

  1. 组件声明了状态和UI的映射.
  2. 组件有Props/State两种状态
  3. “组件”可由其他组件拼装而成

三、React的写法与实现

(Hooks)

(一)、Hooks写法新手入门

useState

传入一个初始值,返回一个状态和set该状态的函数,用户可以用哪个过调用该函数来实现状态的修改。

useEffect

传入一个函数,和一个数组,数组是状态的数组称作依赖项,该函数在mount是和依赖项被set的时候会执行。 (有°副作用“的函数,要传入 useEffect 来执行。副作用代表除了单纯的计算之外,还要做其它的一些事情,比如网络请求,更新 DOM, localStorage 存储数据等。)

Hook 使用法则

1.不要在循环,条件或嵌套函数中调用 Hook。

(二)、React的实现

Problem1.

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

Problem2.

Virtual DOM (虚拟 DOM)
Virtual DOM 是一种用于和真实 DOM 同步,而在JS 内存中 维护的一个对象,它具有和 DOM 类似的树状结构,并和
DOM 可以建立--对应的关系。
它赋予了 React 声明式的 AP1:您告诉 React 希望让UI 是什么状态,React 就确保 DOM 匹配该状态。这使您可以从属性操作、事件处理和手动DOM 更新这些在构建应用程序时必要的操作中解放出来。

屏幕截图(3085).png

Problem3. How to diff?

屏幕截图(3089).png

四、React状态管理库

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

屏幕截图(3092).png

当前状态,收到外部事件,迁移到下一个状态 屏幕截图(3094).png