在线文档教程

Rendering Elements

渲染元素

元素是 React 应用程序的最小构建块。

一个元素描述了你想在屏幕上看到的内容:

const element = <h1>Hello, world</h1>;

与浏览器 DOM 元素不同,React 元素是普通对象,创建起来很便宜。React DOM 负责更新 DOM 以匹配 React 元素。

注意: 人们可能会将元素与更广为人知的“组件”概念混为一谈。我们将在下一部分介绍组件。元素是什么组成部分“由”组成,我们鼓励您在跳跃前阅读本节。

将元素渲染到 DOM 中

假设<div>您的 HTML 文件中存在某个地方:

<div id="root"></div>

我们称之为“根”DOM 节点,因为它内部的所有内容都将由 React DOM 进行管理。

仅使用 React 构建的应用程序通常具有单个根 DOM 节点。如果您将 React 集成到现有的应用程序中,则可以根据需要拥有尽可能多的独立根 DOM 节点。

要将 React 元素渲染到根 DOM 节点中,请将两者传递给ReactDOM.render()

const element = <h1>Hello, world</h1>; ReactDOM.render( element, document.getElementById('root')

在 CodePen 上试用它。

它在页面上显示“Hello,world”。

更新呈现的元素

React 元素是不可变的。一旦创建了一个元素,就不能更改其子元素或属性。元素就像电影中的单个框架:它表示某个时间点的用户界面。

根据我们目前的知识,更新 UI 的唯一方法是创建一个新元素并将其传递给ReactDOM.render()

考虑这个滴答作响的时钟示例:

function tick() { const element = ( <div> <h1>Hello, world!</h1> <h2>It is {new Date().toLocaleTimeString()}.</h2> </div> ReactDOM.render( element, document.getElementById('root') } setInterval(tick, 1000

在 CodePen 上试用它。

它每秒从setInterval()回调中调用ReactDOM.render()

注意: 实际上,大多数 React 应用程序只会调用ReactDOM.render()一次。在接下来的部分中,我们将学习如何将这些代码封装到有状态的组件中。我们建议您不要跳过主题,因为它们互相构建。

反应只是更新什么是必要的

React DOM 将元素及其子元素与前一元素进行比较,并仅应用必要的 DOM 更新以使 DOM 达到所需的状态。

您可以通过使用浏览器工具检查最后一个示例来进行验证:

即使我们创建了一个元素来描述整个 UI 树,但只有内容已更改的文本节点才会被 React DOM 更新。

根据我们的经验,思考如何在任何特定时刻看到 UI,而不是随着时间的推移如何改变,从而消除了一整类错误。