React循環(huán)遍歷渲染數(shù)組和對象元素方式
循環(huán)遍歷渲染數(shù)組和對象元素
遍歷渲染數(shù)組
1.單純數(shù)組
const pureArr = ['a','b','c','d']
//假如我們想將上面的數(shù)組利用react渲染成一個(gè)列表,代碼如下:{
{pureArr.map(item => (
<li key={item}>item</li>
))}
以上代碼在codesandbox中運(yùn)行結(jié)果如下:

2. 對象數(shù)組
const objArr = [
{
value: "this",
label: "this"
},
{
value: "is",
label: "is"
},
{
value: "test",
label: "test"
}
];
//假如我們想將上面的數(shù)組利用react渲染成一個(gè)列表,代碼如下:{
{objArr.map((item, idx) => (
<li key={idx} className={classes.li}>
{item.label} : {item.value}
</li>
))
}
以上代碼在codesandbox中運(yùn)行結(jié)果如下:

遍歷渲染對象元素
此用法不常見但是個(gè)考點(diǎn)
const statusObj = {
developing: 'Developing',
implemented: 'Implemented',
auditClean: 'Audit Clean',
deprecation: 'Deprecated',
unknown: 'Unknown',
}
function SimpleList(props) {
const { classes } = props;
return (
<div className={classes.root}>
<ol>
{Object.keys(statusObj).map((obj, idx) => (
<li key={idx} className={classes.li}>{obj} : {statusObj[obj]}</li>
))}
</ol>
</div>
);
}
以上代碼在codesandbox中運(yùn)行結(jié)果如下:

遍歷對象生成dom
項(xiàng)目場景
目前有一個(gè)需求,是要接收后臺(tái)返回的一個(gè)對象,并且遍歷他的屬性和值顯示到頁面上,因?yàn)樵搶ο蟊硎镜氖亲远x參數(shù),每一次都不一樣,所以記錄一下;
問題描述
之前最常用的map是方法是用來遍歷數(shù)組的。
const arr = [a, b, c]
render(){
return (
<div>
{
arr.map((item,index)=>{
return (
<div key={index}>{item}</div>
)
})
}
</div>
)
}
那對象的話,怎么遍歷呢?
- API: Object.keys()
- 作用:遍歷對象中的屬性

所以我們可以通過Object.keys(obj)來獲取該對象的所有屬性,根據(jù)這個(gè)數(shù)組的map方法生成相應(yīng)的dom節(jié)點(diǎn),代碼如下:
const obj = {
a: [1,2,3],
b: [4,5,6]
}
Object.keys(obj).map((element,index)=>{
return (
<div key={index}>
<div>{element}</div>
element.map((item,i)=>{
return (
<div key={i}>{item}</div>
)
})
</div>
)
})
不要著急,繼續(xù)往下看,還可能遇到個(gè)小坑
補(bǔ)充
看下面的代碼,看看你能否發(fā)現(xiàn)問題
// field為接口字段,屬性個(gè)數(shù)不確定。
// 例如: field = { a: "123", model: "text", ... }
<Descriptions
title="自定義參數(shù)"
size="middle"
labelStyle={{ color:"#999" }}
style={{ overflowY: "auto", maxHight: "160px" }}
>
{/* <pre >{JSON.stringify(field,null,2)}</pre> */}
{
Object.keys(field).map((name)=>{
return <Descriptions.Item label={name}>{field.name}</Descriptions.Item>
})
}
</Descriptions>
這段代碼在頁面展示的時(shí)候,只展示屬性,那么為什么不展示值呢,這個(gè)就得從對象的點(diǎn)和中括號的區(qū)別說起了。
下面選自《你不知道的JavaScript(上卷)》

簡單的說就是:
- 中括號法可以用變量作為屬性名,而點(diǎn)方法不可以;
- 中括號法可以用數(shù)字作為屬性名,而點(diǎn)語法不可以;
- 中括號法可以使用js的關(guān)鍵字和保留字作為屬性名,而點(diǎn)語法不可以 (盡量避免在變量或者屬性中使用關(guān)鍵字或保留字);
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
ReactQuery系列之?dāng)?shù)據(jù)轉(zhuǎn)換示例詳解
這篇文章主要為大家介紹了ReactQuery系列之?dāng)?shù)據(jù)轉(zhuǎn)換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
可定制react18 input otp 一次性密碼輸入組件
這篇文章主要為大家介紹了可定制react18 input otp 一次性密碼輸入組件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
React DOM-diff 節(jié)點(diǎn)源碼解析
這篇文章主要為大家介紹了React DOM-diff節(jié)點(diǎn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Next.js實(shí)現(xiàn)react服務(wù)器端渲染的方法示例
這篇文章主要介紹了Next.js實(shí)現(xiàn)react服務(wù)器端渲染的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01
react.js 獲取真實(shí)的DOM節(jié)點(diǎn)實(shí)例(必看)
下面小編就為大家?guī)硪黄猺eact.js 獲取真實(shí)的DOM節(jié)點(diǎn)實(shí)例(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
react ant-design Select組件下拉框map不顯示的解決
這篇文章主要介紹了react ant-design Select組件下拉框map不顯示的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
react反向代理使用http-proxy-middleware問題
這篇文章主要介紹了react反向代理使用http-proxy-middleware問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
React 遠(yuǎn)程動(dòng)態(tài)組件實(shí)踐示例詳解
這篇文章主要為大家介紹了React 遠(yuǎn)程動(dòng)態(tài)組件實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03

