React元素渲染
React元素渲染
元素是React应用的最小构成单元。
一个元素就是用来描述你想在屏幕上看到的内容:
1 | const element = <h1>Hello, world</h1>; |
与浏览器的DOM元素不同,React元素是普通的对象,创建起来代价很小。React DOM负责更新DOM以匹配React元素。
注意:
人们可能会将元素与更广为人知的“组件”概念混为一谈。元素是由组件组合而成的。
渲染元素到DOM中
假设你的html文件中有一个<div>
元素:
1 | <div id="root"></div> |
我们称之为“根”DOM节点,因为它内部的一切都将由React DOM进行管理。
使用React构建的应用程序通常只有一个根DOM节点。如果你将React集成到现有的应用程序中,则可以拥有尽可能多的隔离根DOM节点。
要将React元素渲染到根DOM节点,要把根节点和React元素都传递给ReactDOM.render()
:
1 | const element = <h1>Hello, world</h1>; |
更新已渲染元素
React元素是不可变的。一旦创建了一个元素,就不能更改其子元素或属性。一个元素就像电影中的某一帧:它代表了某个时间点的UI。
更新UI的唯一方法是创建一个新元素,并将其传递给ReactDOM.render()
。
思考下面这个时钟的例子:
1 | function tick() { |
它每秒从一个setInterval()
回调中调用ReactDOM.render()
。
React只更新必要的内容
React DOM将元素及其子元素与元素之前的状态进行比较,仅更新必要的DOM到指定的状态。
可以通过chrome控制台查看例子。
尽管我们创建了一个描述整个UI树的元素,但是只有内容改变的文本节点被React DOM更新了。
In our experience, thinking about how the UI should look at any given moment rather than how to change it over time eliminates a whole class of bugs.
我们应该关注在某个时间点UI该是什么样子,而不是随着时间改变UI。