React中映射一個嵌套數(shù)組實現(xiàn)demo
正文
嵌套數(shù)組本質(zhì)上是一個數(shù)組的數(shù)組,你可以把它們想象成一個表格,或者一個二維網(wǎng)格。為了映射一個嵌套數(shù)組,你可以使用平面和映射數(shù)組函數(shù)的組合,或者使用映射中的映射。
你可能想使用哪種方法取決于你的情況,所以我將用一個例子來解釋。如果你的數(shù)據(jù)只是一個一維數(shù)組,你可以簡單地使用一個普通的地圖,你可以通過這個教程查看。
平面+地圖
flat函數(shù)將我們的二維數(shù)組轉(zhuǎn)化為一維數(shù)組,然后我們可以簡單地將其映射到上面以產(chǎn)生我們的組件。在這個例子中,我創(chuàng)建了一個簡單的購物清單,并將一些物品按食物類別分組:
const shoppingCart = [
['apple', 'banana', 'cherry'],
['eggs', 'milk'],
['carrots', 'onions'],
];
這里是我們組件的代碼:
function ShoppingListItem({ item }) {
return <li className="bg-neutral-800 p-2 font-normal shadow">{item}</li>;
}
function ShoppingList() {
return (
<div className="flex h-screen w-screen items-center justify-center">
<div className="flex flex-col items-start justify-center rounded bg-neutral-800 p-8 text-3xl font-bold text-white shadow">
<h1 className="w-full border-b-8 pb-2">Shopping List</h1>
<ul>
{shoppingCart.flat().map((item) => (
<ShoppingListItem key={item} item={item} />
))}
</ul>
</div>
</div>
);
}
這就是我們的頁面的樣子。

相關(guān)的物品被分組了,但為了顯示它們,我們只想得到一個物品的列表。這種方法是最簡單的方法,當(dāng)你的數(shù)據(jù)被分組在一起并不重要時,這種方法很有用。代碼更短,但代價是簡化了我們的數(shù)據(jù)結(jié)構(gòu)。另一個例子可能是像Instagram feed這樣的東西,你從不同的用戶那里得到帖子,然后把它們都放到一個feed中。
使用嵌套地圖
在很多情況下,你可能想保持你的嵌套數(shù)據(jù)的結(jié)構(gòu)。在這個例子中,我們將重構(gòu)我們的購物清單,把我們的食物組放在一起:
function ShoppingListItem({ item, white }) {
return (
<div
key={item}
className={ //Just to have striped rows
'rounded p-5 ' +
(white
? 'bg-neutral-700 text-white'
: 'bg-neutral-100 text-black')
}>
{item}
</div>
);
}
function ShoppingListRow({ items, white }) {
return (
<li className="flex gap-2">
{items.map((item) => (
<ShoppingListItem key={item} item={item} white={white} />
))}
</li>
);
}
function ShoppingListGrouped() {
return (
<div className="flex h-screen w-screen items-center justify-center">
<div className="flex flex-col items-start justify-center gap-8 rounded bg-neutral-800 p-8 text-3xl font-bold text-white shadow">
<h1 className="w-full border-b-8 pb-2">Shopping List</h1>
<ul className="flex flex-col gap-2">
{shoppingCart.map((row, i) => {
return (
<ShoppingListRow
key={row.join()}
items={row}
white={i % 2 === 0}
/>
);
})}
</ul>
</div>
</div>
);
}
為了保持代碼的整潔,我把它分解為一個購物清單項目、一個購物清單行和整個購物清單的組件。我發(fā)現(xiàn)在這種情況下,這是一個非常好的方法,因為你可以從較小的、不太復(fù)雜的構(gòu)件中建立起你的組件。有了這種方法,問題就從如何在一個地圖內(nèi)進行映射,變成了如何在一個數(shù)組上進行映射,并在兩種情況下進行。
下面是我們的更漂亮的購物清單的樣子。

現(xiàn)在,這些行不再是在一個大的列表中,而是被保存在不同的列表中,并使用了TailwindCSS的一些花哨的樣式,你可以在這里準(zhǔn)備更多的東西。這種方法在很多情況下都很有用,比如表格、網(wǎng)格等等。我們也可以很容易地用兩個地圖來寫第一個例子,使用React Fragment,選擇權(quán)完全在你手中。
希望通過這兩個例子中的一個,你能夠在你的場景中通過一個嵌套數(shù)組進行映射,更多關(guān)于React映射嵌套數(shù)組的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React實現(xiàn)復(fù)雜搜索表單的展開收起功能
本節(jié)對于需要展開收起效果的查詢表單進行概述,主要涉及前端樣式知識。對React實現(xiàn)復(fù)雜搜索表單的展開-收起功能感興趣的朋友一起看看吧2021-09-09
react中的watch監(jiān)視屬性-useEffect介紹
這篇文章主要介紹了react中的watch監(jiān)視屬性-useEffect使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
React18中請求數(shù)據(jù)的官方姿勢適用其他框架
這篇文章主要為大家介紹了官方回答在React18中請求數(shù)據(jù)的正確姿勢詳解,同樣也適用其他框架,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
在React中實現(xiàn)txt文本文件預(yù)覽的完整指南
在前端開發(fā)中,從遠程 URL 加載并預(yù)覽文本文件是一項實用且常見的功能,今天,我將帶你深入剖析一個 React 組件 TextViewerURL,它通過 URL 加載文本文件,支持多種編碼),并搭配精心設(shè)計的樣式,讓文本展示更美觀、交互更友好,感興趣的小伙伴跟著小編一起來看看吧2025-03-03
React使用context進行跨級組件數(shù)據(jù)傳遞
這篇文章給大家介紹了React使用context進行跨級組件數(shù)據(jù)傳遞的方法步驟,文中通過代碼示例給大家介紹的非常詳細,對大家學(xué)習(xí)React context組件數(shù)據(jù)傳遞有一定的幫助,感興趣的小伙伴跟著小編一起來學(xué)習(xí)吧2024-01-01

