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判断两个IP地址是否在同一个网段的实现思路
Dec 13 Javascript
浏览器窗口加载和大小改变事件示例
Feb 27 Javascript
基于Jquery实现焦点图淡出淡入效果
Nov 30 Javascript
非常棒的jQuery图片轮播效果
Apr 17 Javascript
Bootstrap CSS布局之代码
Dec 17 Javascript
js实现功能比较全面的全选和多选
Mar 02 Javascript
iscroll动态加载数据完美解决方法
Jul 18 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
JS装饰器函数用法总结
Apr 21 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
Sep 03 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
Jul 18 Javascript
微信小游戏中three.js离屏画布的示例代码
Oct 12 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/12/05 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
php实现的CSS更新类实例
2014/09/22 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
PHP概率计算函数汇总
2015/09/13 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
PHP实现正则匹配所有括号中的内容
2018/06/22 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
JavaScript实现网页截图功能
2014/10/16 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
用Python生成器实现微线程编程的教程
2015/04/13 Python
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
python DataFrame 取差集实例
2019/01/30 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
浅析Python中字符串的intern机制
2020/10/03 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
如何整合JQuery和Prototype
2014/01/31 面试题
自我鉴定模板
2013/10/29 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
安全横幅标语
2014/06/09 职场文书
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers