iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
自我挑戰組

TypeScript 三十天學習日記系列 第 18

Day 18 中場休息,來做點酷東西(狀態管理)

  • 分享至 

  • xImage
  •  

中場休息的第三天~繼續接著做

https://ithelp.ithome.com.tw/upload/images/20211003/20131989J4hk9SSlUm.pnghttps://ithelp.ithome.com.tw/upload/images/20211003/20131989wvbSJH8IWd.png

在取到值之後,接著要做的就是把它渲染到專案清單上啦!上面做的事情跟中場休息第一天做的事情一樣,把 Project list 的表頭給它渲染出來,不一樣的是這邊透過在 constructor() 函式帶入已完成跟未完成的狀態 activefinished 來控制畫面上會顯示的清單,最後 new 出已完成跟未完成的物件。當啷~畫面出來惹

https://ithelp.ithome.com.tw/upload/images/20211003/20131989w0znT0utOI.png

https://ithelp.ithome.com.tw/upload/images/20211003/20131989t9hLdWnKLS.png
https://ithelp.ithome.com.tw/upload/images/20211003/20131989wyyWgDdyBH.png
https://ithelp.ithome.com.tw/upload/images/20211003/20131989cmlQR1lgBI.png

這邊用了 Store 的概念來管理專案清單的狀態,可以想像成 Vuex 或是 Redux 那樣,但這邊面臨到一個問題,如何讓 class 跟 class 之間互相溝通呢?比如說在 ProjectInput 裡面通知 Store 使用者輸入東西了,或者是要怎麼從 Store 傳值到 ProjectList 裡面以便顯示呢?一個做法是建立一個全域的實例,這樣可以透過那個實例在整個檔案使用該 class 裡面的方法,這邊還使用 privatestatic 來確保 Store 是單例的 class,無法再從其他地方呼叫跟建立新實例,因為這個專案我們只需要一個管理狀態的 Store。也在 Store 裡面建立了 listener 陣列來儲存監聽器以便在資料有變化時可以隨時知道。接著就在 ProjectInputProjectList 呼叫在 ProjectState 相對應的函式即可,不過做到這邊還有一些 bug 需要處理,比如說在新增第二件以上的專案時,會連同之前的再重複顯示在清單上,留待到下一次來處理。

另外 listener 那邊我理解的沒有很透徹 QQ,下禮拜會再找比較空閒的時間來搞懂到底是在做甚麼東東,到時候會再做補充(忍不住想哭一下,要補的東西好多 QAQQQQ)

今天暫且先到這邊,謝謝閱讀。:)


上一篇
Day 17 中場休息,來做點酷東西(取值 & 驗證)
下一篇
Day 19 Libraries & TypeScript
系列文
TypeScript 三十天學習日記24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言