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 相关文章推荐
IE与Firefox在JavaScript上的7个不同写法小结
Sep 14 Javascript
JS操作Cookies的小例子
Oct 15 Javascript
JavaScript网页定位详解
Jan 13 Javascript
javascript简单实现命名空间效果
Mar 06 Javascript
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
php和js对数据库图片进行等比缩放示例
Apr 28 Javascript
使用js画图之饼图
Jan 12 Javascript
Angular的事件和表单详解
Dec 26 Javascript
Vue.js路由vue-router使用方法详解
Mar 20 Javascript
通过图带你深入了解vue的响应式原理
Jun 21 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
Aug 07 Javascript
JavaScript 对象创建的3种方法
Nov 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
用PHP实现多级树型菜单
2006/10/09 PHP
php面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
php 引用(&amp;)详解
2009/11/20 PHP
PHP新手入门学习方法
2011/05/08 PHP
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
基于jQuery实现美观且实用的倒计时实例代码
2015/12/30 Javascript
javascript禁止超链接跳转的方法
2016/02/02 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
angular实现商品筛选功能
2017/02/01 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
bootstrap table支持高度百分比的实例代码
2018/02/28 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
Python牛刀小试密码爆破
2011/02/03 Python
python中的yield使用方法
2014/02/11 Python
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Linux中Python 环境软件包安装步骤
2016/03/31 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
python实现电脑自动关机
2018/06/20 Python
python 画图 图例自由定义方式
2020/04/17 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
自我鉴定怎么写
2014/01/12 职场文书
教堂婚礼主持词
2014/03/14 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
2015年党小组工作总结
2015/05/26 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python
python缺失值的解决方法总结
2021/06/09 Python