一、 React简介
React
是 A JavaScript library for building user interfaces
, UI
库,构建组件库的库
React
把用户的界面抽象成一个个组件。
- 开发者通过组合这些组件,得到功能丰富、可交互的界面。
- 并且引入了
JSX
语法,组件间很大程度解耦了,使复用组件变得容易,同时保证组件结构清晰,利于开发和后期维护。
- 通过
webpack
和 babel
将 react
编译成合法的 js
代码,实际上就是将 jsx
语法转化成 js
语法
二、专注视图层
React
并不是完整的 MVC/MVVM
框架,它专注于提供清晰、简洁的 View
(视图)层解决方案。
- 而又与模板引擎(如:
ejs
)不同,React
不仅专注于解决 View
层的问题,又是一个包括 View
和 Controller
的库。
- 对于复杂的应用,可以根据应用场景自行选择业务层框架,并根据需要搭配
Flux
、Redux
、GraphQL/Relay
来使用。
三、Virtual DOM
Virtual DOM
可以说是 React
的一大特点!
- 我们都知道,
DOM
操作是非常昂贵的,恰恰在前端开发中,性能消耗最大的也是DOM
操作。

- 而在
React
中,React
把真实 DOM
树转换成 JavaScript
对象树,即 Virtual DOM
。
- 每次数据更新后,重新计算
Virtual DOM
,并和上一次生成的 Virtual DOM
做对比,对发生
变化的部分做批量更新。

Virtual DOM
的缺点:为对比 DOM
节点需要计算资源
Virtual DOM
的优点:方便和其他平台集成
- 比如
react-native
是基于 Virtual DOM
渲染出原生控件,因为 React
组件可以映射为对应的原生控件。
- 在输出的时候,是输出
Web DOM
,还是 Android
控件,还是 iOS
控件,就由平台本身决定了。
四、函数式编程
- 过去,工业界的编程方式一直以命令式编程为主,像
C
和 Java
等都是由命令式编程构建的
- 而函数式编程,对应的是声明式编程,它是人类模仿自己逻辑思考方式发明出来的。
- 声明式编程的本质是 lambda 演算①。
- 试想当我们操作数组的每个元素并返回一个新数组时,如果是计算机的思考方式,则是需要一个新数组,然后遍历原数组,并计算赋值;
- 如果是人的思考方式,则是构建一个规则,这个过程就变成构建一个 f 函数作用在数组上,然后返回新数组。
- 这样,计算可以被重复利用。
- 对于上面这段话我是这样理解的:
- 命令式编程就像一次性筷子,只能用一次,等你下次要用的时候,只能重新再用一双新的一次性筷子
- 函数式编程就是“铁木”筷子,你这次用了,洗干净后,下一次又可以重新用了。
- 而在
React
中,很明显不是命令式编程,而是函数式编程。
React
把过去要不断重复构建 UI
的过程抽象成组件(实际上,一个组件就是一个函数),通过向组件传递参数去控制组件应该如何在页面上渲染。
- 函数式编程减少了冗余的代码,并且易于我们复用,当你向用哪一个组件,直接调用就可以了!
五、总结
React
是一个UI
库,主攻View
层,但它又可以结合其他库,实现其他的应用逻辑。
React
引入 JSX
语法,实现组件化,并且不是直接操作 DOM
,而是对比前后 Virtual DOM
,根据数据是否变化,决定是否需要更新。
对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。