[情境任務]
小當家:我把餐廳大致上的料理都開發出來囉!名單都整理好了,直接列上去就行
解師傅:太好了~哇!這菜色有點多呢!一個一個列好像太花時間了…不知道能不能一次把這些通通放到菜單上呢?老闆你有什麼想法嗎?
用複製組件的方法雖然不是不行,但我們想要更有效率且好維護的方法!😕
列表渲染
當資料開始多時,將每個元件都複製、塞 props,這並不是一個好維護的作法,
明明是做同一件事卻看起來很冗長
1 | <ul> |
這結構其實都一樣,我們可以將資料模組化,再從一個集合中把資料渲染到畫面,像 Vue、Angular 會有自定義渲染列表的模版,而 React 並沒有列表模版,大多是使用 JavaScript 本身的語法 map
產生,以下列出陣列與物件的渲染方式
◆ 陣列渲染成元素
1 | function App() { |
資料為一個陣列,要重複渲染的地方用大括弧 {} 包住,使用 JavaScript 的陣列語法 map
將每個 item
渲染出來,map
的第二個參數為索引值 index
除了陣列,物件也可以渲染
◆ 物件渲染成元素
1 | function App() { |
物件使用 Object.keys
先把物件屬性變成陣列,再使用 map
渲染
物件渲染出來的結果順序不一定相同,如果要照資料排序須將資料改為陣列
你可能會發現,不管是陣列或物件,為什麼渲染列表第一個元素都有 key
屬性?!
key 必須是唯一值
不管是陣列或物件,渲染出來的第一個元素需要帶入 key
屬性,key
是用來辨別元素的改變或增減
如陣列改變,React 會透過 key
去比較新舊元素有無變更,只改變有變更的元素,才不會整個列表再被重新渲染,影響效能
如果你忘了加 key
,在 console 也會跳出錯誤,提醒你要加 key
◆ 不建議使用索引作為 key
,尤其如果項目的順序會改變的話,這會對效能產生不好的影響,也可能會讓 component 資料產生問題,最好的方法還是加上唯一值,通常可以加上 id
[任務解題]
利用陣列渲染出 menu,渲染 component,並帶入 item 的 props,記得也要加上 key 哦!
1 | import List from "./components/List"; |
餐廳的菜單列表就這樣被渲染出來囉!!🤩
有新的菜色或需要調整時,直接更改 menu 陣列就可以了!
結語
學會渲染列表就可以做很多事了,看起來簡短很多,重要的是好維護,當需要修改資料時,不用去找 component 的 props,直接統一在資料模組管理就好了!
本文為 IT 鐵人賽系列文 你 React 了嗎? 30 天解鎖 React 技能
🚀實體工作坊分享
玩轉 Web頁面的前端技術(HTML/CSS/JS) 一日體驗課
最近時賦學苑開了實體體驗課,即使你對程式碼沒有概念也能上手!Lala 會帶你一起做出一個個人品牌形象網站,帶你快速了解前端的開發流程,快跟我們一起玩轉 Web 吧!🚀線上課程分享
線上課程可以加速學習的時間,省去了不少看文件的時間XD,以下是我推薦的一些課程想學習更多關於前後端的線上課程,可以參考看看。
Hahow
Hahow 有各式各樣類型的課程,而且是無限次數觀看,對學生或上班族而言,不用擔心被時間綁住六角學院
如果你是初學者,非常推薦六角學院哦!剛開始轉職也是上了六角的課,非常的淺顯易懂,最重要的是,隨時還有線上的助教幫你解決問題!
Udemy
Udemy 裡的課程非常的多,品質普遍不錯,且價格都滿實惠的,CP值很高!也是很多工程師推薦的線上課程網站。