React技巧之循环遍历对象
原文链接:https://bobbyhadz.com/blog/react-loop-through-object
正文从这开始~
遍历对象的键
在React中循环遍历对象:
- 使用
Object.keys()方法得到对象的键组成的数组。 - 使用
map()方法来迭代键组成的数组。
export default function App() {
const employee = {
id: 1,
name: 'Bob',
salary: 123,
};
return (
<div>
{/* ️ iterate object KEYS */}
{Object.keys(employee).map((key, index) => {
return (
<div key={index}>
<h2>
{key}: {employee[key]}
</h2>
<hr />
</div>
);
})}
<br />
<br />
<br />
{/* ️ iterate object VALUES */}
{Object.values(employee).map((value, index) => {
return (
<div key={index}>
<h2>{value}</h2>
<hr />
</div>
);
})}
</div>
);
}
我们使用Object.keys方法得到对象的键组成的数组。
const employee = {
id: 1,
name: 'Bob',
salary: 123,
};
// ️ ['id', 'name', 'salary']
console.log(Object.keys(employee));
// ️ [1, 'Bob', 123]
console.log(Object.values(employee));
我们只可以在数组上调用map()方法。所以我们需要得到对象的键组成的数组,或者值组成的数组。
我们传递给Array.map方法的函数被调用,其中包含数组中的每个元素和当前迭代的索引。在上面的例子中,我们使用index作为元素上的key属性,如果可以的话,更好的方式是使用更加稳定的、独一无二的标识符。
当遍历对象的键时,使用对象的键作为key属性是安全可靠的,因为对象中的键保证是唯一的。
export default function App() {
const employee = {
id: 1,
name: 'Bob',
salary: 123,
};
return (
<div>
{/* ️ iterate object KEYS */}
{Object.keys(employee).map(key => {
return (
<div key={key}>
<h2>
{key}: {employee[key]}
</h2>
<hr />
</div>
);
})}
</div>
);
}
然而,如果遍历对象的值,那么使用对象的值作为key属性是不安全的,除非你可以确保所有的值在对象中都是独一无二的。
由于性能的原因,React需要在内部使用key属性。这有助于库确保只重新渲染已经改变的数组元素。说到这里,你不会看到使用索引和一个稳定的、唯一的标识符之间有任何明显的区别,除非你要处理成千上万的数组元素。
遍历对象的值
在React中,循环遍历对象的值:
- 使用
Object.values()方法得到对象的值组成的数组。 - 使用
map()方法迭代对象值组成的数组。
export default function App() {
const employee = {
id: 1,
name: 'Bob',
salary: 123,
};
return (
<div>
{/* ️ iterate object VALUES */}
{Object.values(employee).map((value, index) => {
return (
<div key={index}>
<h2>{value}</h2>
<hr />
</div>
);
})}
</div>
);
}
Object.values
我们使用Object.values 方法得到对象的值组成的数组。
const employee = {
id: 1,
name: 'Bob',
salary: 123,
};
// ️ [1, 'Bob', 123]
console.log(Object.values(employee));
如果你只想渲染对象的值,你可以使用此方法直接访问它们。
Object.entries
你也可以使用Object.entries 方法来返回对象的键值对数组。
export default function App() {
const employee = {
id: 1,
name: 'Bob',
salary: 123,
};
console.log(Object.entries(employee));
return (
<div>
{Object.entries(employee).map(([key, value]) => {
return (
<div key={key}>
<h2>
{key}: {employee[key]}
</h2>
<hr />
</div>
);
})}
</div>
);
}
下面是Object.entries()方法的输出。
const employee = {
id: 1,
name: 'Bob',
salary: 123,
};
// ️ [
// ['id', 1],
// ['name', 'Bob'],
// ['salary', 123],
// ]
const result = Object.entries(employee);
console.log(result);
该方法返回一个包含键值对子数组的数组。
Array.forEach()
另一种方法是使用Array.forEach()方法来迭代对象的键,并将JSX元素推送到一个数组中,然后我们进行渲染。
export default function App() {
const employee = {
id: 1,
name: 'Bob',
salary: 123,
};
const results = [];
Object.keys(employee).forEach(key => {
results.push(
<h2 key={key}>
{key}: {employee[key]}
</h2>,
);
});
return (
<div>
{results}
</div>
);
}
Array.forEach()方法在每个键上都会被调用,然而forEach()方法返回undefined,所以我们不能直接在JSX代码中使用它。相反,我们把JSX元素推到一个数组中,然后再进行渲染。
需要注意的是,这是一个比较间接的方法,你不会在React应用程序中经常看到它的使用。
React技巧之循环遍历对象的更多相关文章
- for/in 循环遍历对象的属性
for/in 语句循环遍历对象的属性. js中获取key得到某对象中相对应的value的方法:obj.key js中根据动态key得到某对象中相对应的value的方法有二: 一.var key = & ...
- JS完成页面跳转并传参的方法|附加:循环遍历对象
此方法只能传递较少参数 方法如下: <a href='page/index.html'>跳转</a> 以上是正常写法,如果要传参按一下写法: <!--参数写在?后面,多个 ...
- cocos2d JS-(JavaScript) 几种循环遍历对象的比较
通常我们会用循环的方式来遍历数组.但是循环是 导致js 性能问题的原因之一.一般我们会采用下几种方式来进行数组的遍历: 方式1: for in 循环: var arr = [1,2,3,4,5]; v ...
- javaScript for in循环遍历对象
for循环常被我们用来遍历数组,而如何遍历对象呢? 这时就需要用到for in循环了 写一个遍历对象名简写如下: for(var xxx in ooo){console.log(xxx)} 其中xxx ...
- cocos2d JS-(JavaScript) cc.each循环遍历对象
有了它,妈妈再也不用担心我的数组会越界啦!! each()方法能使DOM循环结构简洁,不容易出错.each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组.多维数组.DOM, JSO ...
- js for in循环遍历对象,获取key:value值
var testObj = { 'a':'111', 'b':'222', 'c':'333', 'd':'444'}for(var i in testObj){ console.log(i); // ...
- Java循环遍历中直接修改遍历对象
Java 循环遍历中直接修改遍历对象如下,会报异常: for (ShopBaseInfo sp: sourceList) { if(sp.getId()==5){ sourceList.remove( ...
- 如何循环遍历document.querySelectorAll()方法返回的结果
使用JavaScript的forEach方法,我们可以轻松的循环一个数组,但如果你认为document.querySelectorAll()方法返回的应该是个数组,而使用forEach循环它: /* ...
- es6五种遍历对象属性的方法 - 表格整理
ES6 一共有5种方法可以遍历对象的属性. (1)for...in for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性). (2)Object.keys(obj) Obje ...
随机推荐
- 在Vue3项目中使用pinia代替Vuex进行数据存储
pinia是一个vue的状态存储库,你可以使用它来存储.共享一些跨组件或者页面的数据,使用起来和vuex非常类似.pina相对Vuex来说,更好的ts支持和代码自动补全功能.本篇随笔介绍pinia的基 ...
- Typecho文章设置永久链接
说明 想要给Typecho文章一个独立的url,或按照自己的格式来 这时候我们就要设置永久链接 Typecho设置文章永久链接 设置伪静态 伪静态设置要取决于是nginx还是apache,详情请参考& ...
- rabbitmq简单运用
<?php /** * 生产者 */ $connection = new AMQPConnection([ 'host' => '192.168.23.130', 'port' => ...
- 开始项目之前整理Xmind
今天为将要做的项目整理了一份Xmind文档,每个页面,模块,功能都记了下来.带我的老师说过于详细了,但我还是新手,也不懂哪里改精简那里不该. 总结:整理Xmind文档还是很有必要的,之前这个项目我大致 ...
- Python多线程Threading爬取图片,保存本地,openpyxl批量插入图片到Excel表中
之前用过openpyxl库保存数据到Excel文件写入不了,换用xlsxwriter 批量插入图片到Excel表中 1 import os 2 import requests 3 import re ...
- Linux常用命令学习笔记——基于CentOS 7
前言:最近在linux培训时复习了一下linux系统中一些常用的命令和用法,整理成了笔记,虽然些许零散,但希望对大家有所帮助. 目录 0.帮助指令 1.关机.重启.注销命令 2.文件和目录操作命令 3 ...
- Windows下搭建redis 哨兵环境
从 https://github.com/tporadowski/redis/releases 下载windows版的redis,自行下载解压. 关于哨兵模式的讲解,强烈推荐 [深入学习redis(4 ...
- C# iText 7 切分PDF,处理PDF页面大小
一.itext 我要使用itext做一个pdf的页面大小一致性处理,然后再根据数据切分出需要的pdf. iText的官网有关于它的介绍,https://itextpdf.com/ 然后在官网可以查找a ...
- 攻防世界-MISC:Test-flag-please-ignore
这是攻防世界MISC高手进阶区的题目,题目如下 点击下载附件一,解压后得到一个文本文件,打开后得到一串字符串如下: 通过观察,发现是16进制的字符串(由0~f)的字符串组成,尝试将16进制转字符串,结 ...
- 二叉查找树速通攻略 图文代码精心编写(Java实现)
说在前面 如题目所言 这篇文章为了给下一篇二叉查找数做铺垫和前期知识准备,以便大家有良好的阅读体验,本来想合在一起的,但觉得有些长,所以就拆开了哈哈哈,还是新手向,两篇文章有些长,但如果能认真看下去, ...