当前位置: 首页 > article >正文

react中Fragment的使用场景

在 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.kler.cn/a/406051.html

相关文章:

  • 【AI系统】AI 基本理论奠定
  • 向量数据库FAISS之四:向量检索和 FAISS
  • 电子电气架构 ---漫谈车载网关
  • go的依赖注入究竟是毒药还是解药
  • @Autowired与构造器注入区别,为什么spring推荐使用构造注入而不是Autowired?
  • 从复合字符串中分割并解析多个JSON字符串
  • docker-compose快速编排docker容器
  • uniapp+vue2全局监听退出小程序清除缓存
  • 全面解析 Android 系统架构:从内核到应用层的分层设计
  • 大模型呼入机器人系统如何建设?
  • Jdk1.8新特性
  • SQL MAX() 函数深入解析
  • Manus Xsens Metagloves虚拟现实手套
  • 机器学习day7-线性回归3、逻辑回归、聚类、SVC
  • gdb - 调试工具 - 入门 (一)
  • Easyexcel(6-单元格合并)
  • 可通过HTTP获取远端WWW服务信息
  • LINUX系统编程之——环境变量
  • vue2 src_Todolist全局总线事件版本
  • python之使用django框架开发web项目
  • 天气预报1天-中国气象局-地址查询版免费API接口教程
  • 「Mac玩转仓颉内测版27」基础篇7 - 字符串类型详解
  • 【HarmonyOS】鸿蒙应用加载读取csv文件
  • ISUP协议视频平台EasyCVR私有化视频平台新能源汽车充电停车管理方案的创新与实践
  • Kafka 分区分配及再平衡策略深度解析与消费者事务和数据积压的简单介绍
  • nuitka系列: 将py转为pyd文件