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