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.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
Nov 16 Javascript
js 控制页面跳转的5种方法
Sep 09 Javascript
常用的JS验证和函数汇总
Dec 23 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
Jan 05 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
Mar 14 Javascript
JavaScript知识点总结(十)之this关键字
May 31 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
深入理解JavaScript的async/await
Aug 05 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
Sep 07 Javascript
Vue.js自定义指令学习使用详解
Oct 19 Javascript
通过GASP让vue实现动态效果实例代码详解
Nov 24 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
Apr 03 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
CURL状态码列表(详细)
2013/06/27 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
python XlsxWriter模块创建aexcel表格的实例讲解
2018/05/03 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
python中count函数知识点浅析
2020/12/17 Python
Ibatis的核心配置文件都有什么
2014/09/08 面试题
上海奥佳笔试题面试题
2016/11/16 面试题
酒店前厅员工辞职信
2014/01/08 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python
Linux中各个目录的作用与内容
2022/06/28 Servers