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事件热键兼容ie|firefox
Dec 30 Javascript
jQuery中将函数赋值给变量的调用方法
Mar 23 Javascript
IE关闭时判断及AJAX注销案例学习
Feb 18 Javascript
JS实现将人民币金额转换为大写的示例代码
Feb 13 Javascript
jQuery的one()方法用法实例
Jan 19 Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
Dec 22 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
May 08 jQuery
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
Jun 01 jQuery
Vue实现百度下拉提示搜索功能
Jun 21 Javascript
分享Bootstrap简单表格、表单、登录页面
Aug 04 Javascript
JavaScript中set与get方法用法示例
Aug 15 Javascript
vue弹出框组件封装实例代码
Oct 31 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
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
用python登录Dr.com思路以及代码分享
2014/06/25 Python
独特的python循环语句
2016/11/20 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
python pandas修改列属性的方法详解
2018/06/09 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
深入了解Django中间件及其方法
2019/07/26 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
Python爬虫教程之利用正则表达式匹配网页内容
2020/12/08 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
什么是跨站脚本攻击
2014/12/11 面试题
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
复核员上岗演讲稿
2014/01/05 职场文书
购房意向书范本
2014/04/01 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang