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 相关文章推荐
JS按位非(~)运算符与~~运算符的理解分析
Jul 31 Javascript
基于jquery的时间段实现代码
Aug 02 Javascript
每天一篇javascript学习小结(RegExp对象)
Nov 17 Javascript
AngularJS延迟加载html template
Jul 27 Javascript
Angularjs 动态添加指令并绑定事件的方法
Apr 13 Javascript
JS+CSS实现网页加载中的动画效果
Oct 27 Javascript
vue中$refs的用法及作用详解
Apr 24 Javascript
Node.js JSON模块用法实例分析
Jan 04 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
Apr 17 Javascript
js实现登录拖拽窗口
Feb 10 Javascript
JS字符串和数组如何实现相互转化
Jul 02 Javascript
如何在selenium中使用js实现定位
Aug 18 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
php4的session功能评述(三)
2006/10/09 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
php实现简单加入购物车功能
2017/03/07 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
移动端(微信等使用vConsole调试console的方法
2019/03/05 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
Python栈类实例分析
2015/06/15 Python
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
python分布式编程实现过程解析
2019/11/08 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
文员个人求职自荐信
2013/09/21 职场文书
高中自我评价范文
2014/01/27 职场文书
《雾凇》教学反思
2014/02/17 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
新手入门Mysql--概念
2021/06/18 MySQL