Redux 是 JavaScript 應用程式的狀態管理庫,以支援同步資料流而聞名。然而,要處理非同步請求,需要使用 Redux Thunk 或 Redux Promise 等中間件。
預設情況下,Redux 運行在同步資料流模型上,這表示它期望動作創建者傳回描述狀態變更的物件。這確保了狀態更新的一致性和可預測性。然而,當執行非同步操作時,例如從伺服器獲取數據,立即返回結果變得不切實際。
為了方便 Redux 中的非同步操作,引入了中間件。中間件攔截分派到儲存的操作,並能夠處理副作用,例如發出 HTTP 請求或執行可能需要時間的計算。透過使用中間件,操作創建者可以啟動非同步操作,然後將結果作為操作分派。
中介軟體在非同步管理 Redux 狀態方面提供了多個好處:
考慮一個使用 AsyncApi 類別模擬非同步欄位更新的簡單 Redux 應用程式:
const App = (props) => { const update = () => { dispatch({ type: 'STARTED_UPDATING', }); AsyncApi.getFieldValue() .then((result) => dispatch({ type: 'UPDATED', payload: result, })); }; // ... };
雖然這種方法在技術上可行,但它透過非同步處理使元件邏輯變得混亂,從而減少了
使用 Redux Thunk 或 Redux Promise中間件,可以簡化相同的程式碼:
const App = (props) => { const update = () => { dispatch(loadData(props.userId)); }; // ... }; const loadData = (userId) => (dispatch) => { fetch(`http://data.com/${userId}`) .then((res) => res.json()) .then( (data) => dispatch({ type: 'UPDATED', payload: data }), (err) => dispatch({ type: 'FAILURE', payload: err }), ); };
透過將非同步邏輯分離到操作創建者中,該組件仍然不知道該操作的非同步性質。它只是調度操作,中間件處理其餘的事情。
雖然技術上可行,但不建議在 Redux 中不使用中間件處理非同步操作。它引入了複雜性和維護開銷。中間件提供了一種標準化的方法來管理副作用,使 Redux 應用程式中的非同步資料流高效、方便且可測試。
以上是為什麼在 Redux 中使用中間件進行非同步操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!