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 相关文章推荐
Windows Live的@live.com域名注册漏洞 利用代码
Dec 27 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
Sep 14 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
Jul 08 Javascript
jQuery绑定事件不执行但alert后可以正常执行
Jun 03 Javascript
JS基于面向对象实现的放烟花效果
May 07 Javascript
bootstrap布局中input输入框右侧图标点击功能
May 16 Javascript
深入理解js中this的用法
May 28 Javascript
React-router中结合webpack实现按需加载实例
May 25 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
Jul 13 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
Jun 11 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
Mar 04 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
Sep 04 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自定义函数收代码
2010/08/01 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
js几个验证函数代码
2010/03/25 Javascript
js下写一个事件队列操作函数
2010/07/19 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
javascript Slip.js实现整屏滑动的手机网页
2015/11/25 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
python中常用检测字符串相关函数汇总
2015/04/15 Python
python创建进程fork用法
2015/06/04 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
对pandas中时间窗函数rolling的使用详解
2018/11/28 Python
Python Flask框架扩展操作示例
2019/05/03 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
水电工岗位职责
2014/02/12 职场文书
市场营销方案范文
2014/03/11 职场文书
升学宴主持词
2014/04/02 职场文书
技术股份合作协议书
2014/10/05 职场文书
导游词400字
2015/02/13 职场文书
禁毒心得体会范文
2016/01/15 职场文书