响应式系统与 React (1) | 青训营笔记

133 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第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组件生命周期 image.png

  • 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组件的生命周期,希望以后继续研究。

五、参考链接

React组件的生命周期_想你️的博客-CSDN博客_react类组件生命周期

响应式编程与 React.pptx - 飞书云文档 (feishu.cn)