redux - Redux Toolkit 中 createSlice() 中的 extraReducers
问题描述
下面是 Codecademy 的示例代码:
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import { client } from '../api';
const initialState = {
todos: [],
status: 'idle'
};
export const fetchTodos = createAsyncThunk('todos/fetchTodos', async () => {
const response = await client.get('/todosApi/todos');
return response.todos;
});
const todosSlice = createSlice({
name: 'todos',
initialState,
reducers: {
addTodo: (state, action) => {
state.todos.push(action.payload);
}
},
extraReducers: {
[fetchTodos.pending]: (state, action) => {
state.status = 'loading';
},
[fetchTodos.fulfilled]: (state, action) => {
state.status = 'succeeded';
state.todos = state.todos.concat(action.payload);
}
}
});
我对 fetchTodos.pending 和 fetchTodos.fulfilled 作为计算属性的含义感到困惑。我没有看到 fetchTodos 具有这些属性。到底是怎么回事?
解决方案
这些是由createAsyncThunk
参数# createAsyncThunk 接受三个参数:字符串操作类型值、payloadCreator 回调和选项对象。
type
一个字符串,用于生成额外的 Redux 操作类型常量,表示异步请求的生命周期:
例如,'users/requestStatus' 的类型参数将生成这些操作类型:
pending: 'users/requestStatus/pending'
已完成:“用户/请求状态/已完成”
被拒绝:“用户/请求状态/拒绝”
推荐阅读
- html - 将块中的元素与其他块中的其他元素对齐(列表)
- r - R ggplot facet_wrap 具有不同的 y 轴标签,一个值,一个百分比
- sql - 组连续记录
- python - python中的Swagger codegen区分值
- bash - 如何配置启动文件,以便每次打开新 bash 时都可以显示磁盘使用情况?
- image - 如何使用R305指纹模块的USB接口代替UART
- r - Students standing in a line
- java - Android - SQLite 如何按两列获取重复项?
- python - 在 Python 中访问 COM DLL 时出现 AttributeError 异常
- java - What's the recommend way of cloning a jOOQ Record object?