从thunkAction调度另一个thunkAction

问题描述

我在React App中使用redux-toolkit,我有这样的情况:

  1. 从deleteEntites thunkAction发送API调用删除一些 数据库中的实体
  2. 发送getAllEntities thunkAction或发送另一个API调用获取Fresh实体 清单?

问题是在deleteEntities API调用成功后我是否应该调度getAllEntities thunkAction?(如果是,怎么办?)

OR

我应该像在getAllthunkAction.fullfilled中一样发送getAllEntities API调用并在deletethunkAction.fullfilled reducer中重复操作吗?

    //queryParams are no longer needed
    export const getDevices = createAsyncThunk('devices/getDevices',async (thunkAPI:any) => {       // have to find the datatype of thunkAPI
        try {
            const response=await requestFromServer.getAllDevices();
            return response.data;
        } catch (err) {
            // Use `err.response.data` as `action.payload` for a `rejected` action,// by explicitly returning it using the `rejectWithValue()` utility
            return thunkAPI.rejectWithValue(JSON.stringify(err.response.data))
        }  
    })

    // Delete one/many devices with ids and then from entities list
    export const deleteDevices = createAsyncThunk('devices/deleteDevices',async (ids:any,thunkAPI:any) => {       // have to find the datatype of thunkAPI
        try {
          const deleteResponse = await requestFromServer.deleteDevices(ids);
          // Is this OK or I should dispatch getDevices thunk here? a bad practice I guess? 
          const getResponse = await requestFromServer.getAllDevices();
          return getResponse.data;
        } catch (err) {
          // Use `err.response.data` as `action.payload` for a `rejected` action,// by explicitly returning it using the `rejectWithValue()` utility
          return thunkAPI.rejectWithValue(JSON.stringify(err.response.data))
        }
    })

然后在createSlice的extraReducer中

/// The same reducer logic will be copied to devicesThunks.deleteDevices.fulfilled
.addCase(devicesThunks.getDevices.fulfilled,(state,action) => {
        const entities = action.payload;
        .
        .
        .
        return devicesAdapter.setAll({
          ...state,listLoading: false,.
          .
        },entities);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...