Redux 查询多个createApi 和reducerPath 并重新获取

问题描述 投票:0回答:1

我的应用程序必须从 3 个不同的服务器获取数据,它们都连接到同一个数据库。因此,我将代码拆分为 3 个不同的 createAPI 并使用了不同的减速器路径,但是,如果我从 API A 进行编辑 PUT,但 API B 也需要刷新,则似乎我无法使用重新获取。

我无法更改服务器的布局,因为这是我们的后端服务器架构。

export const commonApi = createApi({
  reducerPath: "commonApi",
  baseQuery: commonBaseQuery, //URL: common.dev.example.com
  endpoints: () => ({}), //later injected
  tagTypes: ["SCHEME_LIST", "SCHEME_DETAIL"],
});

export const taskApi = createApi({
  reducerPath: "taskApi",
  baseQuery: taskBaseQuery, //URL: task.dev.example.com
  endpoints: () => ({}), //later injected
  tagTypes: ["LIST", "DETAIL"]
});

export const addressApi = createApi({...}) //omitted, same as above with different url

现在,如果我使用来自

editTask
的突变查询
taskAPI
。它需要从
getTaskList
更新
getTaskDetail
taskAPI
。通过使用
invalidatesTags: ['LIST', 'DETAIL']
我可以自动获取更改。

但是,在此期间

editTask
,来自
getWarehouseList
的 API
commonAPI
也需要更新以反映一些变化。我不能再使用标签,因为它们不属于同一个 createApi/reducerPath

问题是,当

getWarehouseList
中的
commonAPI
发生更改时,我该如何更新
editTask
中的
taskAPI
?或者唯一的方法是执行 unwrap().then() 并手动重新获取此数据?

谢谢!

reactjs react-redux redux-toolkit
1个回答
0
投票

您可以使用 invalidateTags API 切片实用程序来使您喜欢的任何特定标签无效。如何使用它是

commonApi
中的突变端点可以使
taskApi
中的特定标签无效,反之亦然。我建议使用突变端点的 onQueryStarted 处理程序来执行此操作。

示例:

taskAPI 切片

...
editTask: build.mutation({
  ...
  onQueryStarted: async(arg, { dispatch, queryFulfilled }) => {
    try {
      await queryFulfilled;
      dispatch(commonAPI.util.invalidateTags(['LIST', 'DETAIL']));
    } catch(error) {
      // handle/ignore/etc
    }
  },
}),
...
© www.soinside.com 2019 - 2024. All rights reserved.