这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
一,React的历史与应用
1.React的历史
-
2010年Facebook在其PHP生态中引入了xhp框架,首次引入了组合式组件的思想,启发了后来的React的设计。
-
2011年Jordan Walke创造了FaxJs,也就是后来的React原型:
-
2013年React正式开源,在2013 Jsconf上Jordan Walke介绍了这款全新的框架:
-
2012年在Facebook收购Instagram后,该Faxus项目在内部得到使用。Jordan walke基于FaxJs的经验,创造了React。
-
2014年–今天生态大爆发.各种围绕 React的新工具/新框架开始涌现…
2. React的应用
- 前端应用开发,如Facebook,Instagram,Netflix网页版。
- 移动原生应用开发,如Instagram,discord,Oculus。
- 结合Electron,进行桌面应用开发。
二,React的设计思路
1.响应式编程
- 状态更新,UI自动更新。
“状态更新,UI不会自动更新,需要手动地调用DOM进行更新。” - 前端代码组件化,可复用,可封装。
“欠缺基本的代码层面的封装和隔离,代码层面没有组件化。” - 状态之间的相互依赖关系,只需声明即可。
“UI之间的数据依赖关系,需要手动维护,如果依赖链路长,则会遇到“Callback Hell”。”
三,函数式,响应式,react之间的关系
函数式提供的是底层抽象能力。
而业务是由一个个模块实例组成的,这些模块实例是承载了业务逻辑的对象,而不是数据。
OOP不过是以类和this为载体对模块进行组合,而模块组合的核心问题是依赖管理,依赖注入。依赖注入是以依赖描述为前提的,OOP的annotation就是在描述依赖。
函数式其实也可以实现对依赖的描述,比如hooks的API设计。
实现响应式必须依赖一个持有数据的对象,而这一对象显然自身是mutable的而它持有immutable的数据。使用immutable+diff来实现响应式是个性能大杀器,把变更信息转化为结构变化,再diff出来是完全没有必要的。这里可以点名批评redux。
而redux这么做的原因本质上还是react内部实现太不reactive,官方从未提供对数据的响应式封装(vue reactive/angular rxjs),和将响应式数据高性能接入view的能力(angular async pipe)。
可以说是完成度低,又缺失了关键能力的view-library。(react根本算不上framework,可是连library都做不好也太失败了)