这是我参与「第五届青训营 」伴学笔记创作活动的第6天。
一、本堂课重点内容
- React的历史与应用
- React的设计思路
- React(hooks)的写法
二、详细知识点介绍
React历史与应用
应用场景:
- 前端应用开发,Facebook、Instagram、Netflix
- 移动原生应用开发,Discord、Oculus、Instagram
- 桌面应用开发,结合Electron
- react-three-fiber,3D图形
特性:
- 客户端和服务端都可以渲染
- 响应式,界面随状态的变化而自动变化,无需手动绑定
- 性能好,较少的代码
- 结构化,组件级别复用封装,函数式声明
Semi Design和Arco Design
React的设计思路
UI编程的问题:
- 状态更新时,UI不会自动更新,需要手动调用DOM进行更新
- 欠缺基本的代码层面的封装和隔离,代码层面没有组件化
- UI之间的数据依赖关系需要手动维护,若依赖链路长,就会遇到回调地狱
转换式系统和响应式系统:
- 转换式系统 如编译器,给定输入求解输出,又如数值计算,算法等,都是给一个输入求解输出的过程
- 响应式系统 监听事件,消息驱动,不需要很多计算。事件触发时会扩散,改变一些数据和一些状态。如监控系统、UI界面
事件->执行既定的回调->状态变更->UI更新
响应式编程要解决的问题:
- 状态更新,UI自动更新
- 前端代码组件化,可复用,可封装
- 状态之间的互相依赖关系,只需声明即可
组件化:
- 组件是组件的组合或原子组件
- 组件内拥有状态,外部不可见
- 父组件可将状态传入组件内部,父组件应该能控制子组件,外部可以把状态传入
状态应具有局部性,尽量避免状态上升,状态归属于两个节点向上寻找的最近的祖宗节点
- React是单向数据流,只允许父组件向子组件传递数据。但不意味着子组件不可改变父组件状态,因为父组件可以将一个改变自己状态的函数传给子组件,由子组件运行。
- React可通过状态管理库解决状态不合理上升的问题
React组件设计原则:
- 组件声明了状态和UI的映射,输入某个状态,返回一个UI
- 组件有Props/State两种状态,State是内部的私有状态,Props是从外部传入的状态
- 组件可以由其他组件拼装而成
React组件设计形式:
- 组件内部拥有私有状态State
- 组件接受外部的Props状态提供复用性
- 组件根据当前的State和Props返回一个UI
React组件生命周期
- Mounting 组件挂载到DOM上,执行constructor
- render就是函数本身
- 状态改变时,setState设置新状态,重新执行render以更新UI
- 详见参考文档
三、实践实习例子
组件设计形式
- 外部状态
- 私有状态
- 状态传递
- 返回UI
function Compont(props){
const {url}=props;//外部状态
this.text="点击我";//内部私有状态
return(<div>//返回一个UI
<SubCompontent props={{color:"red"}}></SubCompontent>//可以向子组件传递状态
<img scr={url}/>
<button>text</button>
</div>)
}
四、课后个人总结
本节课学习了React的基础知识,包括React的历史和应用,以及React的设计思想,重点学习了响应式编程和组件化的思想。与面向过程的编程不同,UI界面是响应式的,代码执行事件监听,事件的触发是不确定的,需要根据触发的不同事件决定执行不同的回调。本节课还了解了React组件的生命周期,希望以后继续研究。