A 「該用哪個 hook」決策速查

你的需求 工具與依據
值改變時畫面要跟著變 (第 4 章)
值可以從其他 state/props 算出來 不要開 state,渲染時用 算(第 2 章)
計算昂貴,或需要穩定引用給 memo/依賴 /(第 3 章)
值改變但畫面不需要反應(計時器 id、連線實例、最新值鏡像) (第 4 章)
需要與外部系統同步(訂閱、連線、DOM API、資料抓取) +cleanup(第 4 章)
多個狀態總是一起變、轉移規則複雜 +標記聯集 action(第 4、6 章)
整棵樹要讀同一份低頻資料 +自訂 hook 封裝(第 2 章)
兩個元件出現重複的 state+effect 組合 抽自訂 hook(第 4 章)

B 高頻型別速查

寫法 意思與典型用途
任何可渲染內容;children 與插槽 props 的預設選擇
輸入框 onChange 事件; 由此而來
原生元素的全部 props;包裝元件時做交集擴充
初始值代表不了完整型別時手動標註
// 從完整模型演算出 patch/子集型別
鍵值查找表
、 從 的值推導字面量聯集(單一事實來源)
(type guard) 自訂收窄函式;搭配 處理邊界資料
空集合:窮盡檢查哨兵、禁止欄位出現()

C 動手練習:把公司程式碼當教材

以下練習全部以你正在維護的專案為對象,每題 30–60 分鐘, 按章節順序做完,觀念就真正落地了:

  1. (第 1 章)找一個元件,把它的渲染輸出手畫成「狀態 → 畫面」的對應表: 列出所有 state 與 props,以及每種組合下畫面的差異。畫不出來的元件,通常正是難維護的元件。

  2. (第 2 章)在專案裡找出一個「用 同步衍生資料」的例子 (搜尋 出現在 effect 裡的地方),改成渲染時計算,確認行為不變。

  3. (第 2 章)挑一個 context,回答:它的 value 多久變一次? 有多少 consumer?變動時哪些元件會重新渲染?用 React DevTools 驗證你的答案。

  4. (第 3 章)打開 Profiler,錄一次你們產品裡「打字」或「勾選」的互動, 找出渲染範圍最大的一次更新,解釋每個被渲染的元件「為什麼在名單裡」。

  5. (第 3 章)找一個被 包住的元件, 逐一檢查它的每個 props 的引用是否穩定,判斷這個 memo 是否真的在生效。

  6. (第 4 章)找一個依賴陣列被 壓掉警告的 effect, 還原「當初為什麼要壓」,然後用函數式更新、 或搬移邏輯把 disable 拿掉。

  7. (第 5 章)找出專案裡 props 最多的元件,把它的 props 分成 「資料/行為/外觀設定」三類,提出一個用 variant 與插槽收斂的重構草案(不用真的改,寫下來就好)。

  8. (第 6 章)找一組「多顆布林互相牽制」的狀態,設計出對應的標記聯集, 並在 switch 裡加上 窮盡檢查。

  9. (第 7 章)追蹤一個 API 回應的型別旅程:從宣告處出發, 經過幾層到達元件?中間有沒有 ?邊界有沒有驗證?畫出這條鏈。

  10. (第 8 章)找出專案(或你們用的元件庫)裡的 Modal/Drawer/Tooltip: 它用 portal 嗎?ESC 與外部點擊怎麼處理?開啟時焦點去哪、關閉時回到哪? 對照第 8 章的零件清單,找出它多做或少做了什麼。

  11. (第 9 章)用 9.7 節的十二個問題完整掃一個你常改的模組, 把答案寫成半頁筆記——這份筆記就是你理解該模組設計的證明。

D 延伸資源

  • React 官方文件(https://react.dev/learn)—— 本講義多次呼應的 Thinking in React、You Might Not Need an Effect、 Preserving and Resetting State 是最值得精讀的三篇。

  • TypeScript Handbook(https://www.typescriptlang.org/docs/handbook/)—— 搭配第 6 章讀 Narrowing、Generics、Mapped Types。

  • TypeScript Playground(https://www.typescriptlang.org/play)—— 驗證型別行為的最快方式,hover 即見推斷結果。

  • React DevTools Profiler —— 第 3 章所有效能主張的量測工具; 「先量測再優化」的原則靠它落實。

  • TanStack Query 文件(https://tanstack.com/query)—— 伺服器狀態管理的概念章節寫得極好,是第 2 章觀念的工業級延伸。

  • zod(https://zod.dev)—— 邊界驗證與型別單一來源的實作。

—— 全書完。願你下次打開公司的程式碼時,看到的是一連串可以被理解的決策。 ——