响应式系统和react学习总结 | 青训营笔记

50 阅读3分钟

这是我参与「第四届青训营」笔记创作活动的的第5天

React

React的历史和应用

主要领域

  • 前端应用开发,主要为网页版
  • 移动原生应用开发
  • 结合electron,进行桌面应用开发

开发历史:

  • 2010年Facebook在其php生态中,映入xhp框架,首次引入了组合式组件的思想,启发了后来的React的设计
  • 11年jordan walke创造了FaxJS,也就是React的前身
  • 12年在Facebook收购Instagram后,FaxJS得以被发扬光大
  • 14年至今,各种围绕React的新工具开始涌现

React的设计思路

主要目的是解决UI编程的痛点

  • 状态更新,UI不会自动更新,需要手动调用DOM进行更新
  • 欠缺代码层面的封装和隔离,代码层面没有组件化
  • UI之间的数据依赖关系需要维护,如果依赖链过长会导致“callback hell”

前端UI: 事件->执行既定回调->状态变更->UI更新

想要的响应式编程

  • 状态更新,UI自动更新
  • 前端代码组件化,可重用可封装
  • 状态之间的相互依赖关系只需要说明

总结

  • 组件是组件的组合/原子部件
  • 组件内拥有状态且外部不可见
  • 父组件可将状态传入组件内部

状态归属于两个节点,则向上寻找到最近的祖宗节点 ,父组件将函数自顶而下传递,被改变时可以改变父组件状态

React为单向数据流,只能父组件给子组件传数据,通过传递函数来改变父组件状态

组件设计

  • 组件声明了状态和UI的衍射

  • 组件有Props/State两种状态

  • 组件可由其它组件拼装而成

  • 组件内部拥有私有状态State

  • 组件接受外部的Props状态提供复用性

  • 根据当前的State/props返回一个UI

转化式系统VS响应式系统

  • 输入->输出:编译器,数值计算
  • 监听事件,消息驱动:监控系统,UI界面

React的写法

HOOK,挂载函数的一种,不能在循环,条件或嵌套中调用HOOK

React的实现

问题

  • JSX不符合JS标准语法
  • 返回的JSX发生改变时,如何更新DOM
  • State/Props更新时,要重新触发render函数

使用React语法

VirtualDOM,和真是DOM同步,在JS内存中维护的一个对象,具有和DOM类似的结构并且可以建立一一对应的关系。

Diff,权衡更新次数少VS计算速度快 复杂度理论最小为O(n^3),更多的为O(n)

  • 不同类型的元素 替换
  • 同类型DOM元素 更新
  • 同类型组件元素 递归

React的状态管理库

核心思想:将状态抽离到UI外部进行统一管理

状态机:收到外部事件,迁移到下一个状态

应用级框架科普

  • NEXTJS 硅谷明星创业公司Vercel的React开发框架,稳定,开发体验好,支持Unbundled Dev,SWC等,有一键部署平台帮助开发者快速完成步数
  • MODERNJS 字节Web Infra团队研发的全栈开发框架,内置了很多开箱即用的能力与最佳实践,可减少很多调研,选择工具的时间
  • Blitz 无API思想的全栈开发框架,过程中无需API调用和CRUD逻辑,适合前后端逻辑紧密的小项目