Week 08 · Day 07 — 第八週總複習:狀態管理

學習目標

  • 回顧 DI、簡單狀態管理、NgRx
  • 能依規模選擇狀態管理方式
  • 完成並通過本週作業

重點速覽

  • DI@Injectable({ providedIn: 'root' }) 單例,constructor 注入
  • Provider 範圍:root(全域)/ 模組 / 元件(獨立實例)
  • 簡單狀態管理BehaviorSubject + .next() + asObservable() + 不可變更新
  • async pipe:自動訂閱/退訂,最安全
  • NgRx(Redux)
  • Actions:createAction('[來源] 動作', props<T>())
  • Reducer:createReducer(state, on(action, ...)) 純函式
  • Selector:createSelector 讀狀態
  • Store:dispatch(寫)、select(讀)

自我測驗

  1. providedIn: 'root' 的好處?
  2. 簡單狀態管理為何用 BehaviorSubject
  3. NgRx 三個核心是什麼?
  4. reducer 為何要是「純函式」?
答案 1. 全域單例、全應用可注入 2. 有初始值,訂閱立刻收到目前值 3. Actions、Reducer、Store(+ Selectors/Effects) 4. 輸入相同則輸出相同,不產生副作用,方便預測與測試

作業

第八週作業(README) - [ ] 建立 AuthService ✅ - [ ] 實作簡單狀態管理 ✅(BehaviorSubject + 元件訂閱) - [ ] 安裝並使用 NgRx ✅

實作檢核 - [ ] 兩個元件共享同一份狀態並同步更新 - [ ] 用 async pipe 安全顯示狀態 - [ ] 用 NgRx 完成 add/remove todo 流程(action→reducer→selector→UI)

總結

你現在能依照專案規模管理狀態(服務 or NgRx)。下一週優化效能。