React Fragment介绍与使用详解


Posted in Javascript onNovember 11, 2021

前言

在向 DOM 树批量添加元素时,一个好的实践是创建一个document.createDocumentFragment,先将元素批量添加到
DocumentFragment 上,再把 DocumentFragment 添加到 DOM 树,减少了 DOM操作次数的同时也不会创建一个新元素。

和 DocumentFragment 类似,React 也存在 Fragment 的概念,用途很类似。在 React 16之前,Fragment 的创建是通过扩展包 react-addons-create-fragment 创建,而 React 16 中则通过<React.Fragment></React.Fragment> 直接创建 ‘Fragment'。

Fragments出现动机

一种常见模式是组件返回一个子元素列表。以此 React 代码片段为例:

class Table extends React.Component {
  render() {
    return (
      <table>
        <tr>
          <Columns />
        </tr>
      </table>
    );
  }
}

< Columns /> 需要返回多个 元素以使渲染的 HTML 有效。如果在 < Columns /> 的 render() 中使用了父 div,则生成的 HTML 将无效。

class Columns extends React.Component {
  render() {
    return (
      <div>
        <td>Hello</td>
        <td>World</td>
      </div>
    );
  }
}

得到一个 < Table /> 输出:

<table>
  <tr>
    <div>
      <td>Hello</td>
      <td>World</td>
    </div>
  </tr>
</table>

Fragments 由此出现解决了这个问题。

React Fragment介绍与使用

React.Fragment 组件能够在不额外创建 DOM 元素的情况下,让 render() 方法中返回多个元素。一个常见模式是一个组件返回多个元素。Fragments 允许你将子列表分组,而无需向 DOM 添加额外节点。

理解起来就是在我们定义组件的时候return里最外层包裹的div往往不想渲染到页面,那么就要用到我们的Fragment组件了。就和vue的<template ></ template >.

render() {
  return (
    <React.Fragment>
      Some text.
      <h2>A heading</h2>
    </React.Fragment>
  );
}

你也可以使用其简写语法 <></>。

render() {
  return (
    <>
      Some text.
      <h2>A heading</h2>
    </>
  );
}

另外react 16开始, render支持返回数组,知道这个特性的人不在少数。这一特性已经可以减少不必要节点嵌套。

import React from 'react';

export default function () {
    return [
        <div>1</div>,
        <div>2</div>,
        <div>3</div>
    ];
}

<React.Fragment> 与 <>区别

<></> 语法不能接受键值或属性,<React.Fragment>可以。

使用显式 <React.Fragment> 语法声明的片段可能具有 key。一个使用场景是将一个集合映射到一个 Fragments 数组 - 举个例子,创建一个描述列表:

function Glossary(props) {
  return (
    <dl>
      {props.items.map(item => (
        // 没有`key`,React 会发出一个关键警告
        <React.Fragment key={item.id}>
          <dt>{item.term}</dt>
          <dd>{item.description}</dd>
        </React.Fragment>
      ))}
    </dl>
  );
}

key 是唯一可以传递给 Fragment 的属性。未来可能会添加对其他属性的支持,例如事件。

注意:简写形式<></>,但目前有些前端工具支持的还不太好,用 create-react-app 创建的项目可能就不能通过编译。所以遇到这种情况很正常。

到此这篇关于React Fragment介绍与使用详解的文章就介绍到这了,更多相关React Fragment内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
一个JavaScript变量声明的知识点
Oct 28 Javascript
js onload处理html页面加载之后的事件
Oct 30 Javascript
js onmousewheel事件多次触发问题解决方法
Oct 17 Javascript
常见JS验证脚本汇总
Dec 01 Javascript
JS触发服务器控件的单击事件(详解)
Aug 06 Javascript
老生常谈JQuery data方法的使用
Sep 09 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
Jun 11 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
Nov 28 Javascript
vue-element-admin 菜单标签失效的解决方式
Nov 12 Javascript
vue实现浏览器全屏展示功能
Nov 27 Javascript
react 原生实现头像滚动播放的示例
Apr 21 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
Jul 17 Javascript
在js中修改html body的样式
Nov 11 #Javascript
用JS创建一个录屏功能
JavaScript数组 几个常用方法总结
Nov 11 #Javascript
JavaScript 事件捕获冒泡与捕获详情
JavaScript 定时器详情
Nov 11 #Javascript
使用javascript解析二维码的三种方式
Nov 11 #Javascript
实现一个简单得数据响应系统
Nov 11 #Javascript
You might like
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
php compact 通过变量创建数组
2016/11/15 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
Vue 全局loading组件实例详解
2018/05/29 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
一套SQL笔试题
2016/08/14 面试题
机械专业毕业生自荐信
2013/11/02 职场文书
历史教育专业个人求职信
2013/12/13 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
项目投资意向书
2014/04/01 职场文书
2014年新生军训方案
2014/05/01 职场文书
暑期教师培训方案
2014/06/07 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android