我對此有點矛盾,似乎找不到答案。我有一些動作。我想要做的是在不等待結果的情況下觸發請求(這是一個應該樂觀處理的 firebase 呼叫)。
然后我應該如何圍繞這種情況構建我的代碼?不應該考慮使用createAsyncThunk,因為我沒有等待任何東西,也不需要更新任何區域requestStatus變數。
這就是我現在所擁有的:
// Component.js (where I do the dispatch)
useEffect(() => dispatch(updateCheckIn(payload)), [])
// CheckInActions.js
import { updateCheckInInDb } from "../../api/checkin"
import { updateCheckInAction } from "../reducers"
export const updateCheckIn = (update) => {
updateCheckInInDb(update) // make API call
return updateCheckInAction(update) // return actual reducer action
}
// CheckInReducer.js
const checkInSlice = createSlice({
name: "checkIn",
initialState: INITIAL_STATE,
reducers: {
updateCheckInAction(state, action) {
return updateStateViaUpdateApi(state.data, action)
},
},
})
export const { updateCheckInAction } = checkInSlice.actions
export default checkInSlice
這可行,但我覺得有點尷尬(特別是命名)。我需要打電話給一個updateCheckInAction和另一個updateCheckIn。我對 redux 工具包有點陌生。沒有更優雅的方法嗎?
uj5u.com熱心網友回復:
這里最慣用的答案是手寫一個 thunk 啟動異步請求,然后分派普通操作:
export const updateCheckIn = (update) => {
return (dispatch) => {
// make API call
updateCheckInInDb(update)
// dispatch actual action to update state
dispatch(updateCheckInAction(update))
}
}
// used as
dispatch(updateCheckIn(123))
請參閱https://redux.js.org/usage/writing-logic-thunks了解有關總體上什么是 thunk 以及如何撰寫它們的詳細資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468533.html
標籤:javascript 反应 还原 redux 工具包
