【发布时间】:2021-08-17 19:38:21
【问题描述】:
在Redux Tutorial 中,由createAsyncThunk 返回的动作创建者的reducer 作为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属性创建一个动作并响应它。当你响应一个已经存在的动作时,你使用extraReducers。 -
所以这只是语义上的差异,但理论上添加到
reducers或extraReducers都应该有效吗?
标签: javascript redux react-redux redux-thunk