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的键盘控制事件说明
Apr 15 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
Sep 12 Javascript
深入理解JavaScript 闭包究竟是什么
Apr 12 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
Jun 24 Javascript
js实现简单登录功能的实例代码
Nov 09 Javascript
jquery和ajax的关系详细介绍
Nov 29 Javascript
js实现的黑背景灰色二级导航菜单效果代码
Aug 24 Javascript
基于jQuery实现左右图片轮播(原理通用)
Dec 24 Javascript
使用jQuery判断浏览器滚动条位置的方法
May 30 Javascript
最实用的jQuery分页插件
Oct 09 Javascript
详解VUE单页应用骨架屏方案
Jan 17 Javascript
原生js实现下拉框选择组件
Jan 20 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
ADODB类使用
2006/11/25 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
python获得一个月有多少天的方法
2015/06/04 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
tensorflow 模型权重导出实例
2020/01/24 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
父母对孩子的寄语
2014/04/09 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
学校捐款活动总结
2015/05/09 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
Python入门之基础语法详解
2021/05/11 Python