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

271 阅读2分钟

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

课前学习Getting Started – React (reactjs.org)
课后学习Next.js by Vercel - The React Framework (nextjs.org)

学习前所需知识:

  • HTML,JS,CSS 基础
  • 基础的数据结构/算法知识,比如二叉树,深度遍历等。
  • 会使用浏览器提供的 DOM API 来修改 DOM,更新 UI

01. React 的历史与应用

  1. 前端应用开发,如 Facebook,Instagram, Netflix 网页版
  2. 移动原生应用开发,如Instagram,Discord,Oculus
  3. 结合 Electron,进行桌面应用开发

2010年,Facebook 在其 php 生态种,引入了 xhp 框架,首次引入了组合式组件的思想,启发了后来的 React 的设计
2011年,Jordan Walke 创造了FaxJS,也就是后来的 React 原型:image.png
2012年,在 Facebook 收购 Instagram 后,该 FaxJS 项目在内部得到使用,Jordan Walke 基于 FaxJS 的经验,创造了 React
2013年,React 正式开园,在2013 JSConf 上 Jordan Walke 介绍了这款全新的框架

image.png
2014年-今天,生态大爆发,各种围绕 React 的 新工具/新框架 开始涌现:

image.png

02. React 的设计思路

UI 编程痛点

image.png

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

响应式与转换式

image.png

响应式系统

响应式编程

image.png

前端UI

image.png

  1. 状态更新,UI自动更新
  2. 前端代码组件化,可复用,可封装
  3. 状态之间的相互依恋挂你先,只需声明即可

组件化

image.png

总结

  1. 组件是 组件的组合/原子组件
  2. 组件内拥有状态,外部不可见
  3. 父组件可将状态传入组件内部

状态归属问题

[当前价格]状态属于谁?->属于 Root 节点!!
状态归属于两个节点向上寻找到最近的祖宗节点。

image.png

[当前价格]如果改变?->将 onChangeValue() 向下传递

image.png

思考:

  1. React 是单向数据流,还是双向数据流?
  2. 如何解决状态不合理上升的问题?
  3. 组件的状态改变后,如何更新 DOM ?

组件化

组件代码会是什么样子?

  1. 组件内部拥有私有状态 State
  2. 组件接受外部的 Props 状态提供复用性
  3. 根据当前的 State/Props,返回一个 UI

image.png

image.png

03. React(hooks)的写法

image.png

image.png

04. React 的实现

Problems

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

问题1:

image.png

问题2:

image.png

image.png

How to Diff?

image.png

image.png

image.png

05. React 状态管理库

核心思想

image.png

推荐

image.png

状态机

image.png

Modern.js/Reduck

image.png

06. 应用级框架科普

image.png