来自createAsyncThunk的动作创建者是否可以添加到createSlice中的"reducers"而不是"extraReducers"中?



在Redux教程中,createAsyncThunk返回的动作创建者的还原符作为extraReducers传递给createSlice,如下所示:

export const fetchTodos = createAsyncThunk('todos/fetchTodos', async () => {
// async logic
})
const todosSlice = createSlice({
// omit unnecessary code
extraReducers: builder => {
builder
.addCase(fetchTodos.pending, (state, action) => {
state.status = 'loading'
})
}
})

是否可以将动作创建者添加到reducers?例如:

//omit createAsyncThunk
const todosSlice = createSlice({
name: 'todos',
initialState,
reducers: {
// omit reducer cases
fetchTodos.fulfilled = (state, action) => {
// some code to update state based on action.payload
}
})

医生说

我们无法处理createSlice.reducers字段中的那些,因为它们也会生成新的操作类型。

为什么会出现这种情况?

不,不可能是.

reducers字段用于定义大小写缩减器,并生成与这些缩减器相对应的新操作类型,这些操作类型将以片的name命名。换句话说,它用于帮助在切片本身内部定义新的动作类型。

extraReducers用于定义将响应在切片之外定义的其他操作而运行的事例缩减器。

createAsyncThunk定义了新的动作类型,这些动作类型将在切片之外定义。因此,切片必须使用extraReducers来处理这些操作。

如果createAsyncThunk中的动作创建者作为计算的键名添加到reducers中,这将最终创建重复的动作类型,这些动作类型将切片name前缀和thunk的动作类型字符串组合在一起。这意味着,当thunk调度其操作时,它们将与切片所寻找的类型不匹配,并且reducer将永远不会运行。

最新更新