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(讀)
自我測驗
providedIn: 'root'的好處?- 簡單狀態管理為何用
BehaviorSubject? - NgRx 三個核心是什麼?
- 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)。下一週優化效能。