網(wǎng)站首頁 編程語言 正文
正文
嵌套數(shù)組本質(zhì)上是一個(gè)數(shù)組的數(shù)組,你可以把它們想象成一個(gè)表格,或者一個(gè)二維網(wǎng)格。為了映射一個(gè)嵌套數(shù)組,你可以使用平面和映射數(shù)組函數(shù)的組合,或者使用映射中的映射。
你可能想使用哪種方法取決于你的情況,所以我將用一個(gè)例子來解釋。如果你的數(shù)據(jù)只是一個(gè)一維數(shù)組,你可以簡(jiǎn)單地使用一個(gè)普通的地圖,你可以通過這個(gè)教程查看。
平面+地圖
flat函數(shù)將我們的二維數(shù)組轉(zhuǎn)化為一維數(shù)組,然后我們可以簡(jiǎn)單地將其映射到上面以產(chǎn)生我們的組件。在這個(gè)例子中,我創(chuàng)建了一個(gè)簡(jiǎn)單的購物清單,并將一些物品按食物類別分組:
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)的物品被分組了,但為了顯示它們,我們只想得到一個(gè)物品的列表。這種方法是最簡(jiǎn)單的方法,當(dāng)你的數(shù)據(jù)被分組在一起并不重要時(shí),這種方法很有用。代碼更短,但代價(jià)是簡(jiǎn)化了我們的數(shù)據(jù)結(jié)構(gòu)。另一個(gè)例子可能是像Instagram feed這樣的東西,你從不同的用戶那里得到帖子,然后把它們都放到一個(gè)feed中。
使用嵌套地圖
在很多情況下,你可能想保持你的嵌套數(shù)據(jù)的結(jié)構(gòu)。在這個(gè)例子中,我們將重構(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>
);
}
為了保持代碼的整潔,我把它分解為一個(gè)購物清單項(xiàng)目、一個(gè)購物清單行和整個(gè)購物清單的組件。我發(fā)現(xiàn)在這種情況下,這是一個(gè)非常好的方法,因?yàn)槟憧梢詮妮^小的、不太復(fù)雜的構(gòu)件中建立起你的組件。有了這種方法,問題就從如何在一個(gè)地圖內(nèi)進(jìn)行映射,變成了如何在一個(gè)數(shù)組上進(jìn)行映射,并在兩種情況下進(jìn)行。
下面是我們的更漂亮的購物清單的樣子。
現(xiàn)在,這些行不再是在一個(gè)大的列表中,而是被保存在不同的列表中,并使用了TailwindCSS的一些花哨的樣式,你可以在這里準(zhǔn)備更多的東西。這種方法在很多情況下都很有用,比如表格、網(wǎng)格等等。我們也可以很容易地用兩個(gè)地圖來寫第一個(gè)例子,使用React Fragment,選擇權(quán)完全在你手中。
原文鏈接:https://juejin.cn/post/7176280173149929533
相關(guān)推薦
- 2022-07-11 UVM中設(shè)置打印信息的冗余度閾值和重載打印信息的嚴(yán)重性
- 2022-07-27 使用Docker將容器打成鏡像的方法步驟_docker
- 2022-12-02 Python?selenium?get_cookies獲取cookie不全的解決方案_python
- 2022-06-04 服務(wù)器中TIME_WAIT狀態(tài)過多時(shí)的排查分析_應(yīng)用技巧
- 2022-01-13 element ui 表格雙擊單元格修改
- 2022-05-17 NoSQL中的“BASE”特性
- 2023-04-18 Android粒子線條效果實(shí)現(xiàn)過程與代碼_Android
- 2024-04-07 mybatis-plus插入數(shù)據(jù)庫值無效(插入不對(duì),沒有插入數(shù)據(jù)庫默認(rèn)值,int的類型的null會(huì)變
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支