一.react历史与应用
1.1历史
- 2010年 facebook 在其 php 生态中引入了 xhp 框架,首次引入了组合式组件的思想,启发了后来的react的设计
- 2011年 Jordan Walke 创造了 FaxJs,也就是后来的react基础
- 2012年在 facebook 收购 instagram 后,该FaxJs项目在内部得到使用。Jordan Walke 基于FaxJs的经验创造了react
- 2013年react正式开源,在2013 JSConf上 Jordan Walke 介绍了这款全新的框架
1.2应用
- 前端应用开发如facebook,instagram ,netflix网页版
- 移动原生应用开发如instagram ,discord,Oculus
- 结合electron进行桌面应用开发
二.react的设计思路
2.1UI编程痛点
- 状态更新UI不会自动更新,需要手动的调用dom进行操作
- 欠缺基本的代码层面的封装和隔离,代码层面没有组件化
- UI之间的数据依赖关系需手动维护,如果依赖链路长则会遇到 "Callback Hell"
2.2响应式与转换式
转换是系统 != 响应式系统
转换式系统: 给定输入,求解输出,也就是编译器加数值计算
响应式系统: 监听时间,消息驱动,也就是监控系统和UI界面
- 响应式系统: 事件 --> 执行既定的回调 --> 状态变更
- 前端UI: 事件 --> 执行既定的回调 --> 状态变更 --> UI更新
2.3组件化
- 组件是 组件的组合/原子组件
- 组件内拥有状态,外部不可见
- 父组件可将状态传入组件内部
组件设计:
- 组件声明了状态和UI的映射
- 组件有props /state两种状态
- 组件可由其他组件拼装而成
三.react(hooks)的写法
四.react的实现
4.1problems
- JSX不符合js标准语法
- 返回的JSX发生改变时,如何更新dom
- props /state更新时,要重新触发render函数
4.2 How to Diff
更新次数少 <---->(tradeoff) 计算速度快
| 类型 | 方法 |
|---|---|
| 不同类型的元素 | 替换 |
| 同类型的dom元素 | 更新 |
| 同类型的组件元素 | 递归 |