[note] 後 Redux 時代!?留意那些過去常被視為理所當然的事
過去多數人在開發大型 React 專案時,Redux 幾乎是不可獲缺的選項,但當 React 支援 context 和 custom hooks 後,許多人開始反思專案中整合 Redux 的必要性——太多重複的程式碼、零碎的變數和檔案、較高的學習曲線等等,進而使得許多開發者開始提倡用 useContext + useReducer 來取代 redux。
在這篇文章中,並不會給予要不要整合 Redux 到專案中的建議,但會從自身經驗中分享那些過去使用 Redux 開發時,覺得理所當然,卻在移除 Redux 後才意識到的部分,並提出替代方案,最後再由讀者自行評估是否從專案中移除或導入 Redux。
在開始這篇文章前想要先問問讀者:
- 如果有一個中大型的專案,你會想要使用 Redux 嗎?
- 如果不會的話,是什麼原因讓你不想要用 Redux?如果會的話,又是什麼原因?
- 如果要替換掉 Redux 的話,你第一個會想到的是什麼工具?
資訊
本篇文章可以搭配 you-should-know-without-redux 的實作閱讀。
Redux 的主要任務
Redux 一開始是個單純的「狀態管理工具」,解決了 React 中需要透過 prop drilling 的方式來將狀態傳來傳去,並透過 reducer 避免開發者直接 mutate 資料,以減少可能的錯誤並且能追蹤每次資料的變化。
Redux 本身並不支援非同步的資料處理,但因為在前端的資料很難不透過 API 從後端取得,為了解決非同步的問題,有了 redux-thunk、redux saga 和 redux observable 這些用來處理非同步資料請求的工具。在這些工具中,實際上 redux-thunk 不太能作為「非同步資料請求」的工具,它的性質還是比較適合拿來處理簡單基本的「非同步」操作時使用,這點會在稍後做說明。
總結來說,過去 Redux 的使用扮演了兩個重要的任務:
- 資料狀態管理:包含「全域」和「模組內」的資料傳遞,避免惱人的 prop drilling
- 非同步資料請求:透過 API 取得資料後,整合到資料狀態中
現在就讓我們來看一下,拿掉了 Redux 之後,在這兩個主要任務上,有什麼需要留意的地方。