前言
在 React 中,useState
是管理狀態的基礎 Hook,但當應用的狀態邏輯越來越複雜,像是涉及多個欄位更新、交叉依賴或分支邏輯,使用 useState
可能變得難以維護。這時,React 提供的 useReducer
Hook 是一個更合適的選擇。
useReducer
的概念與 Redux 類似,它讓你將狀態管理邏輯集中在一個 reducer 函式中,透過 dispatch
發送動作來更新狀態,使邏輯清晰、可維護性高,非常適合用於中型到大型的應用。
重點摘要
useReducer
與useState
類似,但更適合處理複雜邏輯或多狀態管理。語法格式為:
const [state, dispatch] = useReducer(reducer, initialState)
reducer
是一個函式,根據傳入的action
物件決定如何更新狀態。所有狀態更新都透過
dispatch(action)
進行。初始狀態
initialState
通常是物件或陣列。適合用在:
- 表單資料管理
- Todo List 或清單類資料
- 複雜的元件邏輯
實際範例:使用 useReducer 建立 Todo 狀態管理
以下範例展示如何透過 useReducer
管理一個 Todo List 的完成狀態切換邏輯。
import { useReducer } from 'react'; |
說明
initialTodos
是初始狀態,為一個陣列,包含代辦事項的id
、title
與complete
狀態。reducer
是一個純函式,根據傳入的action
型別(此處為"COMPLETE"
)來更新對應的 todo 狀態。dispatch
是用來觸發reducer
的函式,只要呼叫dispatch({ type: "COMPLETE", id: todo.id })
,就會依據id
切換該 todo 的完成狀態。
延伸說明
上述範例僅實作了完成狀態的切換,但實務中 useReducer
更能發揮作用,因為你可以整合所有的 CRUD 操作邏輯於同一個 reducer 裡,例如:
case "ADD": |
這樣一來,整個應用的狀態更新都統一由 reducer
管理,讓邏輯集中且更容易除錯與擴充。
總結
useReducer
是 React 提供用來處理複雜狀態邏輯的重要工具。當你遇到以下情況時,建議考慮使用 useReducer
:
- 多個狀態變數需要統一處理
- 狀態轉換邏輯複雜且重複
- 想將狀態管理從元件中抽離以提升可讀性
透過 useReducer
,你可以實現更模組化、可維護的應用狀態邏輯,使開發效率更高、錯誤更少。