React 前端开发 (1) - 基础概念

JSX (就是 HTML 和 JS 变量混编)

  • HTML 本身可以指定给 js 变量
  • 使用 {} 可以引用 js 变量
  • JSX 可以嵌套
  • HTML 标签属性需要转化为驼峰形式, class 为 js 保留字所以转化为 className
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component {
render() {
const name = "World";
const app = <div>Hello, {name}</div>;

return (
<div dataIndex="0" className="app">
{app}
</div>
);
}
}

ReactDOM.render(<App />, document.getElementById("root"));

组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 函数组件, 参数 props
function Todo(props) {
return <li>Hello, {props.name}</li>;
}

// 类组件, 属性 this.props
class Todo extends React.Component {
render() {
return <li>Hello, {this.props.name}</li>;
}
}

// 使用组件
<Todo name="" />;

// 渲染组件
ReactDOM.render(<App />, document.getElementById("root"));

State

State 可以允许动态修改数据

在类组件 constructor 中初始化 state, constructor 开始时要调用 super(props);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 定义
constructor(props) {
super(props);

this.state = {
name: "app"
};
}

// 使用
render() {
// 访问数据, this.state.name
}

// 更新
// 错误方式: this.state = {key: value}; 可能会意外覆盖其他内容
// 正确方式: this.setState({key: value}); 会 merge 到 state 中

componentDidMount() {
this.timer = setTimeout(() => {
this.setState({
todoList: todoList
});
}, 2000);
}

componentWillUnmount() {
clearTimeout(this.timer);
}

生命周期

生命周期图: https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/

挂载/更新:

  • constructor() 创建时调用, 如果不需要 state 则无需此方法
  • render() 渲染内容的方法,每个类组件都需要一个 render 方法
  • componentDidMount() 当组件挂载到 DOM 节点中之后会调用的一个方法,我们通常在这里发起一些异步操作,用于获取服务器端的数据等
  • componentDidUpdate()

卸载:
componentWillUnmount() 组件从 DOM 节点中卸载之前会调用的方法,我们一般在这里面销毁定时器等会导致内存泄露的内容

总结

  1. JSX, React, React-Dom
  2. 组件, React.Component, render
  3. props, state
  4. constructor, render, componentDidMount, componentDidUpdate
Donate - Support to make this site better.
捐助 - 支持我让我做得更好.