Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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
Reactjs Redux ToolKit:是否可以在CreateSynchThunk创建的一个操作中从同一个切片调度其他操作_Reactjs_Redux_Redux Thunk_Redux Toolkit - Fatal编程技术网

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
来处理异步请求

我有两种异步操作:

  • 从API服务器获取数据

  • 更新API服务器上的数据

  • 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