react中Fragment的使用场景

embedded/2024/11/23 17:24:07/

在 React 中,Fragment 是一个非常有用的组件,允许你将多个子元素包裹在一起,而不会在 DOM 中产生额外的节点。它通常用于以下几个场景:

import React, {Fragment} from 'react';

1. 返回多个子元素而不添加额外的 DOM 元素,避免 DOM 层级过深

function MyComponent() {
  return (
    <Fragment>
      <h1>Title</h1>
      <p>This is a paragraph.</p>
    </Fragment>
  );
}
可以简写为:

function MyComponent() {
  return (
    <>
      <h1>Title</h1>
      <p>This is a paragraph.</p>
    </>
  );
}
这个 Fragment 不会在实际的 DOM 中产生任何新的节点,只是将 <h1><p> 元素组合在一起。

2.需要键值时使用 Fragment

function List() {
  const items = [{ id: 1, title: 'Item 1' }, { id: 2, title: 'Item 2' }];
  return (
    <div>
      {items.map((item) => (
        <React.Fragment key={item.id}>
          <h3>{item.title}</h3>
          <p>{item.description}</p>
        </React.Fragment>
      ))}
    </div>
  );
}

使用 Fragment 可以直接给每个子元素分配一个 key,避免多余的包裹元素。

3.返回多个条件渲染的元素

当需要基于不同条件渲染多个元素时,Fragment 也非常有用。它可以避免不必要的 div 元素,保持渲染逻辑清晰。

function MyComponent({ isLoggedIn }) {
  return (
    <>
      {isLoggedIn ? (
        <>
          <h1>Welcome back!</h1>
          <button>Logout</button>
        </>
      ) : (
        <>
          <h1>Please log in</h1>
          <button>Login</button>
        </>
      )}
    </>
  );
}
4. 组合多个 return 语句

在某些复杂组件中,你可能有多个 return 语句来处理不同的渲染条件,而 Fragment 可以帮助你避免为每个条件创建新的 DOM 层级

function MyComponent({ isLoading, hasError }) {
  if (isLoading) {
    return <p>Loading...</p>;
  }
  if (hasError) {
    return (
      <React.Fragment>
        <h1>Error</h1>
        <p>Something went wrong.</p>
      </React.Fragment>
    );
  }
  return <h1>Welcome to the app!</h1>;
}

总结

Fragment 是一个非常有用的工具,帮助开发者在不引入额外的 DOM 元素的情况下返回多个子元素。常见的使用场景包括:

  • 返回多个子元素而不增加额外的 DOM 节点。
  • 避免在列表或表格中增加不必要的嵌套。
  • 使用条件渲染时避免不必要的嵌套元素。
  • 在 map() 渲染列表时提供 key

通过使用 Fragment,你可以更精简、更高效地组织和渲染组件内容,同时保持 DOM 的整洁和性能。有些类似于vue中的template模版标签


http://www.ppmy.cn/embedded/139898.html

相关文章

MVC 模型:架构与原理

MVC 模型:架构与原理 MVC(Model-View-Controller)模型是一种广泛应用于软件工程的架构模式,主要用于分离应用程序的逻辑层,以提高其可维护性和可扩展性。MVC模型将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。本文将深入探讨MVC模型的…

RTC QoS方法十三.(ReedSolomonFEC简介)

一、FlexFEC恢复的困局 在使用FlexFEC进行冗余的时候&#xff0c;经验值需要冗余5倍的丢包率&#xff0c;才能有比较高的恢复率。 Flex FEC在2D数组异或时能获得比较高的恢复率&#xff0c;但是如上图所示&#xff0c;25个包发送10个FEC包&#xff0c;成本为10/2540%的冗余度。…

STM32-- 串口介绍

rs485、rs232、rs422 rs485使用&#xff1a; max3485&#xff1a;3.3v左右驱动 max485&#xff1a;5v左右驱动&#xff0c;不过有时候3.3v驱动也可以使用&#xff0c;具体有什么问题或者通过电路规避问题还没有了解过。 rs485和rs422有相同的地方&#xff0c;485满足422的规…

【AI系统】AI系统架构的组成

AI 系统组成 如图所示&#xff0c;大致可以将 AI 系统分为以下几个具体的方向&#xff1a; AI 训练与推理框架 AI 框架不仅仅是指如 PyTorch 等训练框架&#xff0c;还包括推理框架。其负责提供用户前端的 AI 编程语言&#xff0c;接口和工具链。负责静态程序分析与计算图构建…

数字孪生赋能智慧校园:构建全方位校园安全保障新体系

在11月19日最高人民检察院的党组会上&#xff0c;校园安全问题再次被置于重要议程&#xff0c;会议明确指出&#xff0c;校园安全不仅关乎学生的健康成长&#xff0c;更与社会和谐稳定紧密相连。面对侵害学生权益、危害校园安全的犯罪行为&#xff0c;必须采取“零容忍”态度&a…

知识图谱介绍

知识图谱介绍 定义与本质 知识图谱是一种用图的结构来描述知识的方式&#xff0c;图中的节点代表实体&#xff0c;边代表实体间的关系&#xff0c;其本质是一种语义网络&#xff0c;能将人类知识表示为计算机可理解和处理的形式&#xff0c;从而实现知识的关联、推理和应用。发…

Rust编程与项目实战-模块std::thread(之一)

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 12.3.1 spawn创建线程 在Rust中&#xff0c;我们可以使用std::thread::spawn函数来…

<OS 有关> ubuntu 24 不同版本介绍 安装 Vmware tools

原因 想用 apt-get download 存到本地 / NAS上&#xff0c;减少网络流浪。 看到 VMware 上的确实有 ubuntu&#xff0c;只是版本是16。 ubuntu 版本比较&#xff1a;LTS vs RR LTS: Long-Term Support 长周期支持&#xff0c; 一般每 2 年更新&#xff0c;会更可靠与更稳定…