这是我参与「第四届青训营 」笔记创作活动的第7天
1、react历史与应用
应用:
1、前端应用的开发,如Facebook,Instagram,Netfix网页版
2、移动原生应用开发,如Instagram,Discod,Oculus
3、结合Electorn,进行桌面应用开发。
历史:
1、2010年 Facebook再其php生态中,引入了xhp框架,首次引入了组合式组件的思想,启发了后来的React的设计。
2、2011年 Jordan Walke创造了FaxJS,也是后来的React原型
3、2012年 在facebook收购Instagram后,该FaxJS项目在内部得到使用,Jordan Walke基于FaxJS的经验正式创造了React
4、2013年 React正式开源。
2、React的设计思路
UI的编程痛点:
1、状态更新,UI不会自动更新,需要手动的调用DOM进行更新。
2、欠缺基本的代码层面的封装和隔离,代码层面没有组件化。
3、UI之间的数据依赖关系,需要手动维护,如果依赖链路长,则会遇到“Callback Hell"。
转换式系统:
给定输入,求解输出。如编译器,数值计算
响应式系统:
监听事件,消息驱动,如监控系统,UI界面
前端的UI
事件-> 执行既定的回调 -> 状态变更 ->UI更新
我们希望的React
1、状态更新,UI自动更新
2、前端代码组件化,可复化,可封装。
3、状态之间的互相依赖关系,只需声明即可
组件化(不是DOM树)
状态的归属问题
在这里 当前价格应该属于Root节点
状态归属于两个节点向上寻找到最近的祖宗节点
总结
1、组件 是组件的组合/原子的组件
2、组件内拥有状态,外部不可见
3、父组件可将状态传入组件内部
4、React是单向数据流(永远是父组件传数据流给子组件,但并不是说子组件的状态发生改变不会影响父组件)
组件设计
1、组件声明了状态和UI的映射
2、组件有Props/State两种状态
3、组件可由其它组件拼装而成
组件
1、组件内部拥有私有状态State
2、组件接受外部的Props状态提供复用性
3、根据当前的State/Props,返回一个UI
3、React(hooks)的实现
1、JSX不符合JS标准语法
2、返回的JSX发生改变时,如何更新DOM (声明一个和DOM对应的虚拟DOM)
3、State/Props更新时,要重新触发render函数
4、状态管理库
核心思想
缺点:组件依恋于外部的store,一般完全应用于应用
状态机:本身有一个状态,发生事情后,会迁移到下一个状态
状态被整个app应用,还是被某个组件应用。