共计 1465 个字符,预计需要花费 4 分钟才能阅读完成。
外围概念:
- Babel 会把 JSX 本义成一个 React.createElement() 函数调用。
理论代码:
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
React.createElement() 会事后执行一些查看,实际上是创立了一个对象。
const element = {
type: 'h1',
props: {
className: 'greeting',
children: 'Hello, world!'
}
};
这些对象被称为 React 元素。元素是形成 React 的最小砖块。元素是一个对象。
- 如何将 React 元素渲染成 DOM?
想要将一个 React 元素渲染到根 DOM 节点中,只需把它们一起传入 ReactDOM.render()
const element = <h1>Hello, world</h1>;
ReactDOM.render(element, document.getElementById('root'));
- 如何更新已渲染的 DOM?
React 元素是一个不可变的对象。就相当于是电影中的每一帧对应的都是不同的 UI。所以依照咱们之前将 React 元素渲染成 DOM 的办法,咱们只有把新的 React 元素渲染到 DOM 节点中,传入 ReactDOM.render() - React 只更新它须要更新的局部
ReactDOM 会将元素和以及子元素和它之前的状态比照。 - 组件和 props
5.1 组件相当于是 UI 的拆分,为了实现复用。就相当于一个函数,通过 props(相当于参数)灌入数据,通过 state 维持本身状态。返回 React 元素。
5.2 props 是只读的。
引入一个概念——纯函数 函数外部不会批改入参,并且屡次传入雷同入参返回的后果都是一样的。 -
state 和生命周期
state 是外部状态 是公有的
正确应用 state:
6.1 不要间接批改 state
6.2 state 的更新是异步的
解决:给 state 传入一个函数,还能够传一个回调函数this.setState((state, props) => ({counter: state.counter + props.increment}));
6.3 state 更新会被合并的
- 数据是向下流动的
- 列表和 key
key 帮忙 React 辨认哪些元素扭转了,比方被增加或删除。因而你该当给数组中的每一个元素赋予一个确定的标识。key 须要在兄弟节点间是惟一的。而不是全局。
通常咱们应用 id 来作为 key,用索引来做 key 不太好。而且 key 的设定通常是数组最近的上下文。一个经验之谈就是在 map 数组的时候设置 key - 表单
提一个概念,受控组件:向表单那样,数据源是 react 的 state 提供,每次输出过程中发送的操作也是 react 管制。输出的值始终由 React 的 state 驱动。
例如:
<form onSubmit={this.handleSubmit}>
<label>
名字:
<input type="text" value={this.state.value} onChange={this.handleChange} />
</label>
<input type="submit" value="提交" />
</form>
- 生命周期 之前的版本
挂载
constructor
render
componentDidMount
更新
componentWillReceiveProps
shouldComponentUpdata
componentWillUpdata
render
componentDidUpdata
卸载
componentWillUnmount
正文完