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
中,这将最终创建重复的动作类型,将slicename
前缀和thunk的动作类型字符串组合在一起。这意味着当thunk分派其动作时,它们将与sli指定的类型不匹配ce正在寻找,而reducer将永远不会运行。属性reducers
创建一个操作并对其进行响应。当您响应一个已经存在的操作时,您使用extraReducers
。因此这只是语义上的差异,但在理论上,添加到reducers
或extraReducers
应该其他工作?为什么不能将createAsyncThunk
中的新操作类型分派到reducers
中并在reducers中运行?这是否仅仅是因为createSlice
已将其名称作为命名空间reducers?正确。如果要尝试将createAsyncThunk
生成的操作类型作为计算键名传递到红色中ucers
对象,您将生成一个不同的新操作类型,这是双重错误的。切片将永远不会响应thunk调度的操作。