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

98 阅读2分钟

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

React历史与应用

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

React的设计思路

UI编程痛点

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

响应式与转换式

  • 转换式系统:给定[输入]求解[输出] (编译器、数值计算)
  • 响应式系统:监听事件,消息驱动 (监控系统、UI界面)
    • 事件——>执行既定的回调——>状态更新——>UI更新
    • 状态更新,UI自动更新
    • 前端代码组件化,可复用,可封装
    • 状态之间的互相依赖关系,只需声明即可

组件化

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

状态归属问题

  • 状态归属于两个节点向上寻找到最近的祖宗节点
  • 思考
    • React是单向数据流,还是双向数据流? 答:单向数据流
    • 如何解决状态不合理上升的问题? (第五节)
    • 组件的状态改变后,如何更新DOM?(第四节)
  • 组件设计
    • 组件声明了状态和UI的映射
    • 组件有Props/State两种状态
    • “组件”可由其它组件拼装而成
  • 响应式编程

生命周期

Mounting

Updating

Unmounting

React(hooks)的写法

React的实现

  • 01 JSX 不符合 JS 标准语法 --> 转译
  • 02 返回的 JSX 发生改变时,如何更新DOM
  • State/Props更新时,要重新出发render函数

how to Diff

完美的最小Diff算法,需要O(n^3) 的复杂度。

牺牲理论最小Diff,换取时间,得到了 O(n)复杂度的算法:Heuristic O(n) Algorithm

React状态管理库-核心思想

  • 将状态抽离到UI外部进行统一管理
  • 推荐:redux、xstate、mobx、recoil

应用级框架科普

  • NEXT.JS
  • MODERN.JS
  • Blitz

总结

一直在学vue还没有开始学react,这是第一次接触react,还是得补补课~