【发布时间】:2021-07-17 11:43:04
【问题描述】:
现在我有这些操作用于上传 thunk 的生命周期。
type UPLOAD_START = PayloadAction<void>
type UPLOAD_SUCCESS = PayloadAction<{ src: string, sizeKb: number }>
type UPLOAD_FAILURE = PayloadAction<{ error: string }>
我想将它转换为createAsyncThunk 调用,假设它会减少代码。但会吗?
从https://redux-toolkit.js.org/api/createAsyncThunk 的示例来看,应该是这样的:
const uploadThumbnail = createAsyncThunk(
'mySlice/uploadThumbnail',
async (file: File, thunkAPI) => {
const response = await uploadAPI.upload(file) as API_RESPONSE
return response.data // IS THIS THE payload FOR THE fulfilled ACTION ?
}
)
这就是我将如何处理生命周期操作?
const usersSlice = createSlice({
name: 'mySlice',
initialState: // SOME INITIAL STATE,
reducers: {
// standard reducer logic, with auto-generated action types per reducer
},
extraReducers: {
// Add reducers for additional action types here, and handle loading state as needed
[uploadThumbnail.pending]: (state,action) => {
// HANDLE MY UPLOAD_START ACTION
},
[uploadThumbnail.fulfilled]: (state, action) => {
// HANDLE MY UPLOAD_SUCCESS ACTION
},
[uploadThumbnail.rejected]: (state, action) => {
// HANDLE MY UPLOAD_FAILURE ACTION
},
}
})
问题
我假设 createAsyncThunk 异步处理程序的返回是 payload 用于 fulfilled 操作,对吗?
但是如何为pending 和rejected 操作设置payload 类型?我应该将try-catch 块添加到createAsyncThunk 处理程序吗?
这是我应该做的关联吗?
pending === "UPLOAD_START"fulfilled === "UPLOAD_SUCCESS"rejected === "UPLOAD_FAILURE"
Obs: 从我想象的模式来看,看起来我编写的代码不会比我已经用三个单独的动作做的代码少,并在我的常规操作中处理它们减速器(而不是在 extraReducers 道具上做)。在这种情况下使用createAsyncThunk 有什么意义?
【问题讨论】:
标签: typescript redux redux-thunk redux-toolkit