响应式系统与react | 青训营

102 阅读2分钟

一.react历史与应用

1.1历史

  1. 2010年 facebook 在其 php 生态中引入了 xhp 框架,首次引入了组合式组件的思想,启发了后来的react的设计
  2. 2011年 Jordan Walke 创造了 FaxJs,也就是后来的react基础
  3. 2012年在 facebook 收购 instagram 后,该FaxJs项目在内部得到使用。Jordan Walke 基于FaxJs的经验创造了react
  4. 2013年react正式开源,在2013 JSConf上 Jordan Walke 介绍了这款全新的框架

1.2应用

  1. 前端应用开发如facebook,instagram ,netflix网页版
  2. 移动原生应用开发如instagram ,discord,Oculus
  3. 结合electron进行桌面应用开发

二.react的设计思路

2.1UI编程痛点

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

2.2响应式与转换式

转换是系统 != 响应式系统

转换式系统: 给定输入,求解输出,也就是编译器加数值计算
响应式系统: 监听时间,消息驱动,也就是监控系统和UI界面

  • 响应式系统: 事件 --> 执行既定的回调 --> 状态变更
  • 前端UI: 事件 --> 执行既定的回调 --> 状态变更 --> UI更新

2.3组件化

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

组件设计:

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

三.react(hooks)的写法

8c440142da1c582b54a708d0751fffa.jpg

四.react的实现

4.1problems

  1. JSX不符合js标准语法
  2. 返回的JSX发生改变时,如何更新dom
  3. props /state更新时,要重新触发render函数

4.2 How to Diff

更新次数少 <---->(tradeoff) 计算速度快

类型方法
不同类型的元素替换
同类型的dom元素更新
同类型的组件元素递归

五.应用级框架科普

139e2e8f2b3de9ffd2b50aaba3110a1.jpg