react中Fragment的使用场景

devtools/2024/11/24 5:38:29/

在 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/devtools/136467.html

相关文章

CSS 设置宽高的单位概览

CSS 设置宽高的单位概览 在 CSS 中&#xff0c;设置宽度和高度的单位有多种&#xff0c;每种单位都有特定的用途和适用场景。下面是常见的单位整理及使用示例。 单位类型代表性单位使用场景视口单位vw, vh响应式布局&#xff0c;全屏背景百分比单位%相对父元素的宽高调整绝对…

自监督学习:从概念到应用的全面解析

引言 自监督学习&#xff08;Self-Supervised Learning, SSL&#xff09;是近年来机器学习领域的重要进展&#xff0c;它以未标注数据为核心&#xff0c;通过设计自生成标签的任务&#xff0c;挖掘数据的潜在结构和特征表示。在计算机视觉、自然语言处理&#xff08;NLP&#…

【一篇搞定配置】网络分析工具WireShark的安装与入门使用

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;各种软件安装与配置_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1.…

centos一键卸载docker脚本

#!/bin/bash# 检查是否以 root 用户运行 if [ "$EUID" -ne 0 ]; thenecho "请使用 root 用户或通过 sudo 执行该脚本&#xff01;"exit 1 fiecho "停止 Docker 服务..." systemctl stop dockerecho "卸载 Docker 软件包..." yum remov…

linux下的spi开发与框架源码分析

目录 1 概述 2 spi子系统框架 3 spi硬件原理回顾 4 框架下spi的应用 4.1 在驱动中使用spi 4.1.1 使用框架与流程 4.1.2 示例分析 4.2 在应用使用spi 5 spi硬件驱动开发 6 spi子系统源码分析 6.1 子系统加载 6.2 注册controller过程 6.3数据收发过程 6.4 数据关系…

有关django、python版本、sqlite3版本冲突问题

本篇是解析为什么会出现python版本使用旧版本的sqlite3版本的问题&#xff0c;解决办法在下面有备注&#xff0c;如有遗漏之处或错误&#xff0c;望佬们指出&#xff0c;再次感谢不禁~~ 【坑点】更新python版本&#xff0c;并不会让sqlite版本实时更新&#xff0c;依旧是调用首…

微软Visual C++ 2015运行时库:轻松运行C++应用程序的必备工具

微软Visual C 2015运行时库&#xff1a;轻松运行C应用程序的必备工具 【下载地址】MicrosoftVisualC2015Redistributablex64x86安装包下载 本仓库提供Microsoft Visual C 2015 Redistributable x64/x86安装包的下载。该安装包包含了Visual C库的运行时组件&#xff0c;这些组件…

麒麟部署一套mysql集群,使用ansible批量部署可以提高工作效率

一、 服务端和客户端同时配置kylin镜像 配置麒麟的yum源 rm -rf /etc/yum.repos.d/CentOS-Base.repo vim /etc/yum.repos.d/Kylin_aarch64.repo Copy 写入如下yum源 [ks10-adv-os] name = Kylin Linux Advanced Server 10 - Os baseurl = http://update.cs2c.com.cn:8080/…