react hooks作為當下比較流行的react庫,擁抱js閉包,擁抱函數式編程。將無狀態組件發展成一種新趨勢。
前段時間我用hooks提供的api模擬出了一個簡單的類似redux的實現。要回答這個問題,首先得弄清楚為什么使用redux或者hooks。
redux一般使用比較復雜的頁面應用, 它充當的是一個狀態管理的角色。讓state的變化變得可以預測,通過store發送指定type的dispatch,傳遞到reducer純函數對狀態進行更改。然后視圖對state的更改做出響應。並且還支持跨頁面的狀態共享。
hooks本質上不是為了解決state的管理問題,它其實是引入了無狀態組件,簡化react的生命周期,比較適合單頁面或者比較簡單的應用。
我的模擬redux的過程中發現類action里面無法獲取到最新的reducer狀態值。因為我在頁面上使用const [state,dispatch]=useReducer(reducer,initState)這樣的方式,為了能將與服務端的交互寫到一起,我將state和dispatch作為構造函數的參數傳遞給action,使得我在action里面可以使用dispatch({type:''}).但由此引發的問題是state不能得到及時更新,導致如果在action里面直接獲取state會有問題。這在我看來是用hooks而丟棄redux的一個弊端。只能在代碼里控制不在action里面獲取state的值,全部由頁面去獲取和傳遞。