React 元素渲染

简介: 10月更文挑战第7天

在 React 18 中,元素渲染与之前的版本有一些变化,特别是在使用 ReactDOM.createRoot 和新的并发特性方面。下面是一个详细的示例和解释,展示如何在 React 18 中渲染元素。

实例

import React from 'react';

import ReactDOM from 'react-dom/client';


// 创建一个简单的 React 组件

function App() {

   return <h1>Hello, React 18!</h1>;

}


// 获取 id 为 "example" 的 DOM 容器,并创建一个 React 根节点

const root = ReactDOM.createRoot(document.getElementById("example"));


// 渲染 React 组件到 DOM 中的根节点

root.render(<App />);

React 元素是构建 React 应用的最小单元,它描述了你希望在屏幕上看到的内容。React 元素是不可变对象,一旦创建就不能更改。

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

与浏览器的 DOM 元素不同,React 当中的元素事实上是普通的对象,React DOM 可以确保浏览器 DOM 的数据内容与 React 元素保持一致。

将元素渲染到 DOM 中

首先我们在一个 HTML 页面中添加一个 id="example"<div>:

<div id="example"></div>

在此 div 中的所有内容都将由 React DOM 来管理,所以我们将其称为 "根" DOM 节点。

我们用 React 开发应用时一般只会定义一个根节点。但如果你是在一个已有的项目当中引入 React 的话,你可能会需要在不同的部分单独定义 React 根节点。

要将 React 元素渲染到根DOM节点中,我们通过把它们都传递给 root.render() 的方法来将其渲染到页面上:

实例

// 创建一个 React 元素const element =<h1>Hello, world!</h1>;  // 获取 DOM 容器并创建根节点const root = ReactDOM.createRoot(document.getElementById("example"));  // 渲染 React 元素到 DOM 中的根节点root.render(element);


尝试一下 »

root.render 方法将 element 渲染到之前创建的根节点中,这样 element 就会显示在 id 为 "example" 的 DOM 元素内。

更新元素渲染

React 元素都是不可变的。当元素被创建之后,你是无法改变其内容或属性的。

目前更新界面的唯一办法是创建一个新的元素,然后将它传入 ReactDOM.render() 方法:

来看一下这个计时器的例子:

实例

const root = ReactDOM.createRoot(document.getElementById("example"));  function tick() {  const element = (    <div>       <h1>Hello, world!</h1>       <h2>现在是 {new Date().toLocaleTimeString()}.</h2>     </div>   );   root.render(element);} setInterval(tick, 1000);


尝试一下 »

以上实例通过 setInterval() 方法,每秒钟调用一次 ReactDOM.render()。

我们可以将要展示的部分封装起来,以下实例用一个函数来表示:

实例

function Clock(props) {  return (    <div>       <h1>Hello, world!</h1>       <h2>现在是 {props.date.toLocaleTimeString()}.</h2>     </div>   );} function tick() {  const root = ReactDOM.createRoot(document.getElementById("example"));   root.render(    <Clock date={new Date()} />   );} setInterval(tick, 1);


尝试一下 »

除了函数外我们还可以创建一个 React.Component 的 ES6 类,该类封装了要展示的元素,需要注意的是在 render() 方法中,需要使用 this.props 替换 props

实例

class Clock extends React.Component {  render() {    return (      <div>         <h1>Hello, world!</h1>         <h2>现在是 {this.props.date.toLocaleTimeString()}.</h2>       </div>     );   }} function tick() {  const root = ReactDOM.createRoot(document.getElementById("example"));   root.render(    <Clock date={new Date()} />   );} setInterval(tick, 1);


尝试一下 »

React 只会更新必要的部分

值得注意的是 React DOM 首先会比较元素内容先后的不同,而在渲染过程中只会更新改变了的部分。

目录
相关文章
|
2月前
|
前端开发 JavaScript
React学习之——条件渲染
【10月更文挑战第16天】React 中没有像Vue中v-if这种指令。React 中的条件渲染和 JavaScript 中的一样,使用 JavaScript 运算符 if 或者条件运算符去创建元素来表现当前的状态,然后让 React 根据它们来更新 UI。
|
2月前
|
监控 前端开发 UED
在 React 18 中利用并发渲染提高应用性能
【10月更文挑战第12天】利用并发渲染需要综合考虑应用的特点和需求,合理运用相关特性和策略,不断进行优化和调整,以达到最佳的性能提升效果。同时,要密切关注 React 的发展和更新,以便及时利用新的技术和方法来进一步优化应用性能。你还可以结合具体的项目实践来深入理解和掌握这些方法,让应用在 React 18 的并发渲染机制下发挥出更好的性能优势。
120 59
|
2月前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
|
2月前
|
前端开发 JavaScript 算法
React 渲染优化策略
【10月更文挑战第6天】React 是一个高效的 JavaScript 库,用于构建用户界面。本文从基础概念出发,深入探讨了 React 渲染优化的常见问题及解决方法,包括不必要的渲染、大量子组件的渲染、高频事件处理和大量列表渲染等问题,并提供了代码示例,帮助开发者提升应用性能。
57 6
|
2月前
|
前端开发 JavaScript
React 条件渲染
10月更文挑战第9天
30 0
|
4月前
|
前端开发 JavaScript
React 组件和 React 元素有什么区别?
【8月更文挑战第31天】
40 0
|
4月前
|
前端开发 JavaScript 中间件
|
4月前
|
前端开发 JavaScript 数据管理
React 中无渲染组件
【8月更文挑战第31天】
42 0
|
4月前
|
前端开发 JavaScript 搜索推荐
|
1月前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
75 9