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)算法