1. 简介

React中的一个常见模式是一个组件返回多个元素。Fragments允许你将子列表分组,而无需向DOM添加额外节点。

2. 使用场景

当我们想封装一个table组件,并将table组件中纵向的Columns单独抽取出来进行封装,因为一行中可能有很多列,所以Columns中有很多td,而React中不允许有多个根组件,所以代码如下:

  • Table/index.js
import { Component } from 'react';
import Columns from '../Columns';
export default class Table extends Component {render() {return (<table><thead><tr><Columns /></tr></thead></table>)}
}
  • Columns/index.js
import { Component } from 'react';
export default class Columns extends Component {render() {return (<div><td>第一列</td><td>第二列</td></div>)}
}

此时在使用时,页面会报警告:
validateDOMNesting(...): <td> cannot appear as a child of <div>.
validateDOMNesting(...): <div> cannot appear as a child of <tr>.

在浏览器中查看DOM元素我们会发现:

从元素和警告的字面意思我们也可以理解,即td不能作为div的子元素,div不能作为tr的子元素,那么此时React.Fragments的作用就出现啦,Table组件不变,我们将上述Columns组件进行修改

  • Columns/index.js
import { Component } from 'react';
import { Fragment } from 'react';
export default class Columns extends Component {render() {return (<Fragment><td>第一列</td><td>第二列</td></Fragment>)}
}

此时会发现警告内容消失了,渲染之后的DOM元素也是正常的

从我的理解上看,Fragment似乎有些类似于Vue中我们常用的template,在渲染元素的时候不会渲染该标签,不会改变原本的格式

3. 简写

我们也可以使用更简短的语法来声明Fragments,<></>,但它并不支持key或属性

export default class Columns extends Component {render() {return (<><td>第一列</td><td>第二列</td></>)}
}

4. 带key的Fragments

若是循环某个具体的组件,也是需要key做唯一的标识,key是唯一可以传递给Fragment的属性。

<dl>{props.items.map(item => (// 没有`key`,React 会发出一个关键警告<React.Fragment key={item.id}><dt>{item.term}</dt><dd>{item.description}</dd></React.Fragment>))}
</dl>

如果有用,点个赞呗~

总结用法,希望可以帮助到你,
我是Ably,你无须超越谁,只要超越昨天的自己就好~

React_Fragments相关推荐

最新文章

  1. pandas移除dataframe字符串数据列中的前N个字符(remove the first n characters from values from column of dataframe)
  2. 工厂方法模式--结合具体例子学习工厂方法模式
  3. UIWindow 使用介绍
  4. Dcloud课程1 APP的架构有哪些
  5. 学python爬虫需要什么基础-学习python爬虫需要具备的基本功
  6. Linux 4.0 里,你可能再也不需要重启你的操作系统。
  7. WPF资源的基本概念
  8. 数学建模学习笔记——分类模型
  9. 俄罗斯无人机公司Hoversrf紧随Volocopter步伐,酷炫“方程式”飞行汽车来袭
  10. android 随机布尔值,在 Android 的某些机型,v1.2.2 v1.2.1 加密会导致 boolean 类型的值丢失的问题...
  11. C++使用stringstream分割字符串
  12. c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...
  13. mysql5.7.10 二进制包_MYSQL5.7二进制包的安装
  14. 灵活高效,内含SOTA模型,Facebook开源图像分类研究代码库pycls
  15. 微信服务号开发IOS设备js-sdk认证失败问题总结
  16. 多元线性回归练习-预测房价
  17. 【渝粤教育】电大中专消费者行为学_1作业 题库
  18. Oracle11G数据库的双机热备份配置--基础篇
  19. 购物网站首页设计(HTML CSS JS layui )
  20. 微信小程序语音搜索功能

热门文章

  1. linux2.6内核initrd机制解析
  2. springboot项目无法访问webapp下的html页面
  3. RK3562:MIPI多摄配置
  4. linux中man使用技巧
  5. 炼成百万富翁:不离婚不搬家少生子成致富条件
  6. 微信小程序测试方法 二维码测试 开发自测
  7. 感觉是我见过最牛逼的JS代码
  8. MySQL 高频面试题,最常问!
  9. ubuntu找不到网卡,不显示网络问题
  10. Ares Protocol 品牌全线升级,覆盖全栈产品