第 4 組讀書會 3-3 3-4 #51
tony140407
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
日期:2025/04/15
導讀人:33
筆記工:Blue
簡報連結
回顧
3-3 維持 React 資料流可靠性的重要關鍵:immutable state
什麼是 mutate
原始型別
物件型別
保持 State 資料的 immutable
React 中不應該去 mutate 一個物件或陣列型別的資料
當需要顯示舊有 state 時
React 效能優化機制,常常會仰賴於資料是否相同來作為判斷依據
如果使用 mutate 方式錯誤的修改了內容,導致值改變了參考沒變,就不會觸發優化處理
Q&A
3-4 Immutable update
物件資料的 immutable update
範例一
以 spread 語法複製物件內容,並增加新屬性或更新既有屬性
範例二
巢狀結構一樣使用 spread 語法
範例三
要更新資料的那一層物件也要使用 spread 語法
範例四
想要一個跟 obj1 一樣的物件,但不想要 a 屬性
陣列資料的 immutable update
範例一
在新陣列的開頭&結尾插入新項目
範例二
在陣列的中間插入新項目
範例三
創建包含 arr1 資料但不包括第二個元素的 arr2
範例四
創建包含 arr1 資料的 arr2,並將 arr2 中的第二個元素改名為 “second”
範例五(錯誤範例)
利用 sort 排序陣列
範例六
必須先把 arr1 複製出來,再對新陣列進行 sort
範例七
reverse 也是一樣會 mutate 到既有資料,所以需要先進行複製
巢狀式參考型別的複製誤解
Spread 複製的是物件或陣列的值或參考?
spread 語法只會做單層的 shallow clone(shallow copy)
淺拷貝 & 深拷貝
的「值」,對於嵌套的物件或陣列,則會複製「參考」。
Q&A
複製實際的「值」,若屬性內容是另一個物件或陣列,則會複製「參考」。
deep clone:當遇到巢狀的物件或陣列時,會深層的將每一層級的每個值都複製
出來,複製出來的資料會完全獨立於既有資料
為什麼?
即為不同參考?
聊天室的討論:
關於 nesting immutable 也可以使用 structuredClone API 來 deep copy 新的 object
https://developer.mozilla.org/en-US/docs/Web/API/Window/structuredClone
有沒有方法可以在執行程式前先檢查有沒有使用 immutable state?
eslint AST 解析
https://github.com/eslint-functional/eslint-plugin-functional/blob/main/docs/rules/immutable-data.md
什麼情境需要用到下面文章
https://dev.to/malapashish/mastering-react-re-renders-the-key-prop-hack-you-need-to-know-17hh
官網有寫到 key rerender 這件事就是了
https://react.dev/learn/managing-state#preserving-and-resetting-state
假設你的元件會依照某個東西,長出內部的狀態(譬如元件內依照 id 去 fetch user data )
就能強制整個元件依照 id 的變化重新 mount 一次元件
有沒有推薦的軟體可以來測試手機上的網頁
https://developer.chrome.com/docs/devtools/remote-debugging
Vconsole
Beta Was this translation helpful? Give feedback.
All reactions