Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以将CreateSynchThunk中的动作创建者添加到';减速器';而不是';外减速器';在createSlice中?_Javascript_Redux_React Redux_Redux Thunk - Fatal编程技术网

Javascript 是否可以将CreateSynchThunk中的动作创建者添加到';减速器';而不是';外减速器';在createSlice中?

Javascript 是否可以将CreateSynchThunk中的动作创建者添加到';减速器';而不是';外减速器';在createSlice中?,javascript,redux,react-redux,redux-thunk,Javascript,Redux,React Redux,Redux Thunk,在中,由createAsynchThunk返回的操作创建者的还原器作为extralreducer传递给createSlice,如下所示: 导出常量fetchTodos=createAsynchThunk('todos/fetchTodos',async()=>{ //异步逻辑 }) const todoslice=createSlice({ //省略不必要的代码 外部减速器:生成器=>{ 建设者 .addCase(fetchTodos.pending,(状态,操作)=>{ state.statu

在中,由
createAsynchThunk
返回的操作创建者的还原器作为
extralreducer
传递给
createSlice
,如下所示:

导出常量fetchTodos=createAsynchThunk('todos/fetchTodos',async()=>{ //异步逻辑 }) const todoslice=createSlice({ //省略不必要的代码 外部减速器:生成器=>{ 建设者 .addCase(fetchTodos.pending,(状态,操作)=>{ state.status='正在加载' }) } }) 是否可以将动作创建者添加到减少者中?例如:

//省略createAsynchRunk
const todoslice=createSlice({
名称:“待办事项”,
初始状态,
减速器:{
//省略减速箱
fetchTodos.completed=(状态、操作)=>{
//一些基于action.payload更新状态的代码
}
})
医生说

我们无法在createSlice.reducers字段内处理这些操作,因为这些操作也会生成新的操作类型

为什么会这样?不,不可能

reducers
字段用于定义案例reducer,并生成与这些reducer相对应的新动作类型,这些动作类型将命名为切片的
name
。换句话说,它用于帮助定义切片内部的新动作类型

extraReducers
用于定义案例缩减器,这些案例缩减器将响应在切片外部定义的其他操作而运行

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


如果
createAsynchThunk
中的动作创建者作为计算键名添加到
reducers
中,这将最终创建重复的动作类型,将slice
name
前缀和thunk的动作类型字符串组合在一起。这意味着当thunk分派其动作时,它们将与sli指定的类型不匹配ce正在寻找,而reducer将永远不会运行。

属性
reducers
创建一个操作并对其进行响应。当您响应一个已经存在的操作时,您使用
extraReducers
。因此这只是语义上的差异,但在理论上,添加到
reducers
extraReducers
应该其他工作?为什么不能将
createAsyncThunk
中的新操作类型分派到
reducers
中并在
reducers中运行?这是否仅仅是因为
createSlice
已将其名称作为命名空间reducers?正确。如果要尝试将
createAsyncThunk
生成的操作类型作为计算键名传递到
红色中ucers
对象,您将生成一个不同的新操作类型,这是双重错误的。切片将永远不会响应thunk调度的操作。