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

58 阅读2分钟

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

React的历史与应用

  • 2010年 Facebook在php生态中,引入xph框架,引入组合式组件 启发的React
  • 2011 FaxJS React原型

image.png

  • 2012 Facebook收购Instagram后,FaxJS在项目内部使用,基于FaxJS创造了React
  • 2013 React正式开源
  • 2014-今天 React各种生态和工具大爆发

React的设计与实现

UI编程痛点

  1. 状态更新,UI不会自动更新,需手动更新
  2. 卡按却封装隔离 未组件化
  3. UI长链路相互依赖,遇到 “Callback Hell”

设计与实现

  1. UI跟随状态更新

  2. 代码组件化 可复用 可封装

    • 原子组件
    • 组件内状态 外部不可见
    • 父组件可将状态传入组件内部
  3. 状态之间依赖 只需声明

状态归属问题

状态归属于两个节点向上寻找到最近的祖宗节点

组件设计

  1. 组件声明状态和UI映射
  2. 组件有Props(外部提供复用性) / State(内部状态) 两种状态
  3. 组件可以由组件拼装

组件化

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

生命周期

image.png

React(hooks)的写法

image.png

image.png

React的实现

Problems

  1. JSX不符合JS标准语法

image.png

  1. 返回JSX发生改变时,如何更新DOM

    • 根据diff算法只更新需要更新的部分虚拟DOM

      • 虚拟Dom是一种用于和真实DOM同步 而在JS内存中维护的一个对象,它具有和DOM类似的树状结构,和DOM直接建立一一对应关系;赋予了React声明式API
    • How to Diff?

      • 不同类型的元素——替换
      • 同类型的DOM元素——更新
      • 同类型的组件元素——递归
  2. State/Props更新时,要重新触发render(组件函数本身)函数

React状态管理库

核心思想

image.png

  • 将状态抽离到UI外部进行统一管理

推荐

image.png