React技巧之组件中返回多个元素
原文链接:https://bobbyhadz.com/blog/react-return-multiple-elements
正文从这开始~
fragment
使用React fragment从组件中返回多个元素。比如说,<><div>First</div><div>Second</div></> ,当我们需要在不向DOM添加额外节点的情况下,对一个子元素列表进行分组时,就会用到React Fragments。
export default function App() {
return (
<>
<div>First</div>
<div>Second</div>
</>
);
}
我们使用了一个Reactfragment来分组一个子元素的列表,而没有向DOM添加额外的节点。
该截图显示,我们的相邻
div元素已经被添加到DOM中,而没有被包裹在一个额外的DOM节点中。
你也可能会看到更多的fragments 语法。
import React from 'react';
export default function App() {
return (
<React.Fragment>
<div>First</div>
<div>Second</div>
</React.Fragment>
);
}
上面的两个示例会取得相同的结果。他们都对一个子元素的列表进行分组,而没有向DOM添加额外的节点。
现在大多数代码编辑器都支持更简明的语法,所以更常用。
然而需要注意的是,如果你必须要给fragment传递key属性,你就必须使用更为详细的语法。
import React from 'react';
export default function App() {
const arr = ['First', 'Second'];
return arr.map(element => {
return (
<React.Fragment key={element}>
<div>{element}</div>
</React.Fragment>
);
});
}
如果你使用了简写fragment语法<> </> ,你将无法给fragment传递任何属性。
DOM
另一种解决方案是将子元素包裹在另一个DOM元素中,例如
div。
export default function App() {
return (
<div>
<div>First</div>
<div>Second</div>
</div>
);
}
这样就会解决无法传递属性的问题。因为我们没有返回多个元素,而是返回一个包含多个子元素的div元素。
在React组件中,我们必须只返回单个元素。因为从函数中返回多个值是无效语法。
React组件只是函数,所以当我们在同一级别返回多个元素时,我们实际上是在函数的同一级别使用多个return语句。
function render() {
return React.createElement('div', null, 'First');
return React.createElement('div', null, 'Second');
}
第二个return语句是不可达的,并且属于无效语法。
另一方面,当我们使用fragment或者其他元素来包裹元素时,该函数只返回一个带有多个子元素的单一值,这样便解决了错误。
React技巧之组件中返回多个元素的更多相关文章
- JS数组 选定元素slice() slice() 方法可从已有的数组中返回选定的元素。 语法 arrayObject.slice(start,end)
选定元素slice() slice() 方法可从已有的数组中返回选定的元素. 语法 arrayObject.slice(start,end) 参数说明: 1.返回一个新的数组,包含从 start 到 ...
- react 不能往组件中传入属性的值为 undefined
在使用 andt design 的时候遇到个需求,需要清除 Select 组件选中后的值,让它变成什么都没选中,显示 placeholder 刚开始以为设置为 null 即可,结果发现设置为 null ...
- react组件中返回并列元素的方法
我们在写react组件的时候,经常会遇到这种问题,在render中return元素只能有一个顶级元素,比如div,假如写成这样就会报错: render(){ return( <div>12 ...
- react:在一个组件中调用别的组件中的方法
先介绍一下要解决的问题:react中一个组件A和一个组件B,其中B是被connect(connect是redux中的方法)包装过的组件,包装成BContainer,A和BContainer的关系是兄弟 ...
- react之四种组件中DOM样式设置方式
1.行内样式 想给虚拟dom添加行内样式,需要使用表达式传入样式对象的方式来实现 行内样式需要写入一个样式对象,而这个样式对象的位置可以放在很多地方 例如:render函数里.组件原型上.外链js文件 ...
- react 当中当组件抛出的dom元素最外层不止一个的时候的写法
在react16当中,对一个组件抛出多个dom进行了支持,写法 以数组形式抛出
- React Hooks中父组件中调用子组件方法
React Hooks中父组件中调用子组件方法 使用到的hooks-- useImperativeHandle,useRef /* child子组件 */ // https://reactjs.org ...
- react 高阶组件的 理解和应用
高阶组件是什么东西 简单的理解是:一个包装了另一个基础组件的组件.(相对高阶组件来说,我习惯把被包装的组件称为基础组件) 注意:这里说的是包装,可以理解成包裹和组装: 具体的是高阶组件的两种形式吧: ...
- Vue 组件中 移动 this.$el 的注意事项
比如, mounted () { document.body.appendChild(this.$el); // insertAdjacentElement // insertBefore}, 这几行 ...
随机推荐
- [源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇
[源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇 目录 [源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇 1. ...
- 2021.12.07 P4291 [HAOI2008]排名系统(Treap)
2021.12.07 P4291 [HAOI2008]排名系统(Treap) https://www.luogu.com.cn/problem/P4291 双倍经验: https://www.luog ...
- jsp第六次作业
1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8&quo ...
- MATLAB地图工具箱学习心得(二)设计可变参数和位置拾取的“放大镜”式投影程序
最近刚好因为一些原因整理这方面的内容,所以还是把这篇鸽了一年多的博客顺手写出来了∠( ᐛ 」∠)_.因为是当时课程设计的一部分,程序上难免会有一些不足和bug,在这里将设计的思路分享给大家. 本篇博客 ...
- 为何数据库连接池不采用IO多路复用?
今天我们聊一个不常见的 Java 面试题:为什么数据库连接池不采用 IO 多路复用? 这是一个非常好的问题.IO多路复用被视为是非常好的性能助力器.但是一般我们在使用 DB 时,还是经常性采用c3 ...
- 【面试普通人VS高手系列】Redis和Mysql如何保证数据一致性
今天分享一道一线互联网公司高频面试题. "Redis和Mysql如何保证数据一致性". 这个问题难倒了不少工作5年以上的程序员,难的不是问题本身,而是解决这个问题的思维模式. 下面 ...
- for & while &迭代器
for (int i = 0; i < 10; i++) { System.out.println("hello"); } int a=100; for (;a<110 ...
- 网络协议OSI模型-TCP/IP-三次握手
OSI模型 在制定计算机网络标准方面,起着重大作用的两大国际组织是:国际电信联盟电信标准化部门,与国际 标准组织(ISO),虽然它们工作领域不同,但随着科学技术的发展,通信与信息处理之间的界限开始 变 ...
- VUE3 之 自定义指令的实现 - 这个系列的教程通俗易懂,适合新手
1. 概述 老话说的好:能屈能伸的人生,才是完满而丰富的人生. 言归正传,今天我们来聊聊 VUE 中自定义指令的实现. 2. 自定义指令 2.1 文本框聚焦的实现 <body> < ...
- Linux 运维请务必收藏~ Nginx 五大常见应用场景
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Nginx 是一个很强大的高性能 Web 和反向代理服务,它具有很多非常优越的特性,在连接高并 ...