React 的核心思想是:封装组件。
各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个组件。
基于这种方式的一个直观感受就是我们不再需要不厌其烦地来回查找某个 DOM 元素,然后操作 DOM 去更改 UI。
React 大体包含下面这些概念:
- 组件
- JSX
- Virtual DOM
- Data Flow
这里通过一个简单的组件来快速了解这些概念,以及建立起对 React 的一个总体认识。
import React, { Component } from 'react';
import { render } from 'react-dom';
class HelloMessage extends Component {
render() {
return <div>Hello {this.props.name}</div>;
}
}
// 加载组件到 DOM 元素 mountNode
render(<HelloMessage name="John" />, mountNode);
组件
React 应用都是构建在组件之上。
上面的 HelloMessage
就是一个 React
构建的组件,最后一句 render
会把这个组件显示到页面上的某个元素 mountNode
里面,显示的内容就是 <div>Hello John</div>
。
props
是组件包含的两个核心概念之一,另一个是 state
(这个组件没用到)。可以把 props
看作是组件的配置属性,在组件内部是不变的,只是在调用这个组件的时候传入不同的属性(比如这里的 name
)来定制显示这个组件。
JSX
从上面的代码可以看到将 HTML 直接嵌入了 JS 代码里面,这个就是 React 提出的一种叫 JSX 的语法,这应该是最开始接触 React 最不能接受的设定之一,因为前端被“表现和逻辑层分离”这种思想“洗脑”太久了。但实际上组件的 HTML 是组成一个组件不可分割的一部分,能够将 HTML 封装起来才是组件的完全体,React 发明了 JSX 让 JS 支持嵌入 HTML 不得不说是一种非常聪明的做法,让前端实现真正意义上的组件化成为了可能。
好消息是你可以不一定使用这种语法,后面会进一步介绍 JSX,到时候你可能就会喜欢上了。现在要知道的是,要使用包含 JSX 的组件,是需要“编译”输出 JS 代码才能使用的,之后就会讲到开发环境。
Virtual DOM
当组件状态 state
有更改的时候,React 会自动调用组件的 render
方法重新渲染整个组件的 UI。