一、了解React
1、什么是React
1、React是facebook在2013年开园在GitHub上的JavaScript库
2、狭义讲,React是一个用来构建UI的JavaScript库;广义讲,React不仅仅是JavaScript框架本身,更是一套完整的前端开发生态体系;
3、React不是一个MVC框架,仅仅是视图层(V)的库。
2、React的理念
1、React的理念归结为一个公式:UI = render(data);
2、用户看到的UI界面,是一个函数——render的执行结果,只接受数据——data作为参数,这是一个纯函数,即输出只依赖于输入的函数,两次函数的调用如果输入相同,那么输出也绝对相同。如此一来,最终的用户界面,在render函数确定的情况下完全取决于输入数据。
二、React的核心概念
React的核心概念——虚拟DOM(Virtual DOM)
(1)虚拟DOM是React的基石,是React高性能的支撑;
(2)React将DOM抽象为虚拟DOM,虚拟DOM其实就是一个对象来描述DOM;
(3)React通过对比虚拟DOM更新前和更新后的差异,最终只把变化的部分重新渲染,提高渲染的效率;
DOM & JavaScript
-
DOM完全不属于JS(也不再js引擎中存在),JS其实是一个非常独立的引擎,DOM其实是浏览器引出的一组让js操作HTML文档的API而已
-
DOM的操作对于JS实际上是外部函数的调用。
Virtual DOM & DOM
-
Virtual DOM对真实DOM的一种模拟,相对于直接操作真实的DOM结构,我们构建一颗虚拟的树,将各种数据和操作直接应用在这棵虚拟的树上,然后再将对虚拟树上的修改应用到真实的DOM结构上
-
公式上可以理解为:Virtual DOM => DOM
Diff算法和调和机制
-
Diff算法用于计算Virtual DOM中真正变化的部分,弊病只针对该部分进行原生DOM操作,而非重新渲染整个页面,时间复杂度为O(n);
-
React在每次需要渲染时,会先比较当前DOM内容和待渲染内容的差异,然后再决定如何最优的更新DOM,这个过程称为调和;
Virtual DOM + render
- Virtual DOM为js和浏览器DOM交互的桥梁,它独立于浏览器环境;
- Virtual DOM配备上不同的渲染器,就可以将虚拟DOM的内容渲染到不同的平台,用JS开发多平台应用的目的;
React的核心概念——JSX语法
-
JSX是JS语言的一种扩展语法,使我们能够在JS中编写类似HTML的代码(语法糖)
-
JSX的基本语法规则:遇到 HTML标签(以<开头),就用 HTML 规则解析;遇到代码块(以{开头),就用 JavaScript 规则解析;
-
JSX转化成渲染内容之前,默认会进行转义,有效地防止XSS(cross-site-scripting, 跨站脚本);
React的核心概念——React组件
- 组件是对代码封装的一种形式;
- React组件是对封装起来的具有独立功能的UI部件;
- React组件让你可以将UI分割成独立可复用的部分,并独立管理每个部分;
- React组件特征:可组合,可重用,可维护,可测试
组件的声明方式
- 函数组件
function Welcome(props) {
return <h1>Hello, {props.name}</h1>
}
- class组件
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
React的核心概念——props & state
- React组件的数据分为两种——props和state
- React的渲染结果是由组件属性和状态共同决定的,状态和属性的区别是:状态维护在组件内部(私有),属性是由外部控制(公有)。它们任何一个的改变都会引发组件的重新渲染
- 组件修改组件自身状态state,需要调用setState方法
- React组件必须保护它们的props不被更改
React的核心概念——单项数据流
- 在React中,数据是自顶向下单项流动的,即从父组件到子组件;
- 这条原则让组件之间的关系变的透明且可预测;
三、学习资源指引
React官方文档
http://reactjs.org/ (英文版)
https://react.docschina.org/ (中文版)
相关书籍:《深入React技术栈》,《React进阶之路》