响应式系统与React | 青训营

26 阅读2分钟

React的历史与应用

历史

React是由Facebook开发的一种前端JavaScript库。它最早于2011年在Facebook内部被创建,用于构建用户界面。随着时间的推移,React逐渐发展成为一种流行的开发工具,并于2013年首次对外发布。它的简单性、高效性和可重用性使得开发人员可以更轻松地构建复杂的用户界面。React还引入了一种称为“组件”的概念,使得开发人员可以将界面拆分为独立的可重用部分。它现在被广泛应用于许多大型的网站和应用程序,并且在前端开发中扮演着重要的角色。

应用

  • 前端应用开发
  • 移动原生应用开发
  • 桌面应用开发

React的设计思路

UI编程的痛点

  • 状态更新,UI不会自动更新,需要手动调用DOM进行更新
  • 欠缺基本的代码层面的封装和隔离,代码层面没有组件化
  • UI之间的数据依赖关系需要手动维护,如果依赖链路长,则会遇到“Callback-Hell”

转换式系统与响应式系统:

前者:由代码对给定输入进行一系列操作并求解输出。

后者:时刻监听事件,消息驱动响应

前端不适合使用转换式系统编程。而应该使用响应式编程思路:

事件-执行既定的回调-状态变更-UI更新

我们希望:

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

总结

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

=>状态归属问题?

若属性需要共享,那么就应该归属于两个节点向上寻找到的最近的祖宗节点;如果在root内写函数,就可以向下传递进而改变属性状态。因此React是单向流。

我们可以由此得到组件设计的特点

  • 组件声明了状态和UI的映射
  • 组件有Props/State两种状态
  • “组件”可由其他组件拼装而成

生命周期

React(hooks)的写法

React的实现

问题

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

解决

Virtual DOM(虚拟DOM)

牺牲理论最小Diff,换取时间:Heuristic O(n)算法

React状态管理库

将状态抽离到UI外部进行统一管理

状态机