Reactjs Redux ToolKit:是否可以在CreateSynchThunk创建的一个操作中从同一个切片调度其他操作
我正在使用Reactjs Redux ToolKit:是否可以在CreateSynchThunk创建的一个操作中从同一个切片调度其他操作,reactjs,redux,redux-thunk,redux-toolkit,Reactjs,Redux,Redux Thunk,Redux Toolkit,我正在使用redux工具包和createAsyncThunk来处理异步请求 我有两种异步操作: 从API服务器获取数据 更新API服务器上的数据 export const updateData=createAsyncThunk('data/update',async(params)=>{ 返回wait wait sdkClient.update({params}) }) export const getData=createAsyncThunk('data/request',async()=
redux工具包
和createAsyncThunk
来处理异步请求
我有两种异步操作:
export const updateData=createAsyncThunk('data/update',async(params)=>{
返回wait wait sdkClient.update({params})
})
export const getData=createAsyncThunk('data/request',async()=>{
const{data}=await sdkClient.request()
返回数据
})
我将它们添加到一个切片中的extralreducers
const slice=createSlice({
名称:'数据',
初始状态,
还原子:{},
外部减速器:(生成器:任意)=>{
builder.addCase(getData.pending,(state)=>{
//...
})
builder.addCase(getData.rejected,(state)=>{
//...
})
builder.addCase(
getData.com,
(状态,{payload}:PayloadAction)=>{
state.data=payload.data
}
)
builder.addCase(updateData.pending,(state)=>{
//...
})
builder.addCase(updateData.rejected,(state)=>{
//...
})
builder.addCase(updateData.completed,(state)=>{
//(国家数据)
useffect(()=>{
调度(getData())
}[快讯])
常量handleUpdate=()=>{
分派(updateData())
}
返回(
//数据放在这里
更新
)
}
更新数据后,我试图在handleUpdate
中添加dispatch(getData())
。但是由于异步thunk,它无法工作。我想知道是否可以在updateData
的生命周期操作中调度getData
操作,即
builder.addCase(updateData.completed,(state)=>{
dispatch(getData())/首先:请注意,减缩器始终需要是没有副作用的纯函数。因此,您永远不能dispatch
那里的任何东西,因为那将是一个副作用。即使您设法做到这一点,redux
也会警告您
现在来谈谈手头的问题
您可以创建一个thunk,它发送并等待updateData
调用完成,然后发送getData
调用:
export const updateAndhenget=(params)=>async(dispatch)=>{
等待调度(更新数据(参数))
返回等待分派(getData())
}
//像这样使用它
调度(更新数据集(参数))
或者如果两个步骤总是被分派在一起,你可以考虑组合它们:
export const updateDataAndGet=createAsyncThunk('data/update',async(params)=>{
等待sdkClient.update({params})
const{data}=await sdkClient.request()
返回数据
})
您的意思是“等待调度(updateDataAndGet(params))”而不是“等待调度(updateData(params))”希望这是一个输入错误?这是两个不同的示例解决方案。第一个分别引用OP的updateData
thunk和getData
thunk。第二个将它们合并为一个新的thunk名称updateData和Get