这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
认识React
FaxJS(React原型) => React
FaxJS几个特点:
Seamless Client Server Rendering:客户端 + 服务端渲染Reactive:状态变化触发UI更新Performant:精细处理性能优化Structural:组件复用封装、函数式声明、JS中声明组件
2013年React正式开源
原生编程痛点
- 手动调用
DOM更新。状态更新时UI不会自动更新,需要手动调用DOM进行更新 - 欠缺封装隔离。代码层面无组件,基本的代码欠缺封装和隔离
UI之间的数据依赖需要手动维护。若链路过长会遇到回调地狱
React特性
响应式编程
- 状态更新,
UI自动更新 - 前端代码组件化,可复用、封装
- 状态之间的互相依赖关系,只需声明即可
组件化
- 组件是组件的组合/原子组件
- 组件内拥有状态,外部不可见
- 父组件可将状态传入组件内部
设计
- 组件声明了状态和
UI映射 - 组件有
Props/State两种状态 - 组件可由其他组件拼装而成
生命周期
Hooks
- useState
- useEffect(副作用,修改外部系统)
实现
- jsx语法转换
- 虚拟DOM => diff
状态组件库
将状态抽离UI组件外部(store)进行管理
概念
Store:保存数据的地方,你可以把它看成一个容器,整个应用只能有一个 Store。
State:Store 对象包含所有数据,如果想得到某个时点的数据,就要对 Store 生成快照,这种时点的数据集合,就叫做 State。
Action:State 的变化,会导致 View 的变化。但是,用户接触不到 State,只能接触到 View。所以,State 的变化必须是 View 导致的。Action 就是 View 发出的通知,表示 State 应该要发生变化了。
Action Creator:View 要发送多少种消息,就会有多少种 Action。如果都手写,会很麻烦,所以我们定义一个函数来生成 Action,这个函数就叫 Action Creator。
Reducer:Store 收到 Action 以后,必须给出一个新的 State,这样 View 才会发生变化。这种 State 的计算过程就叫做 Reducer。Reducer 是一个函数,它接受 Action 和当前 State 作为参数,返回一个新的 State。
dispatch:是 View 发出 Action 的唯一方法。
总结
由于时间原因没有对Hooks做详细的介绍有点可惜。但是从React由何需求/痛点而来进一步介绍React整体的架构的思路非常好,使得我对React理解更进一步。