我最近开始使用RTK查询来获取我的应用程序中的数据。在一个用例中,我想使用createAPI变异的结果,我曾经在服务器上创建过一次资源。这涉及到创建一个特定的负载。
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
export const createResource = createApi({
reducerPath: 'someReducerPath',
baseQuery: fetchBaseQuery({ baseUrl: window.API_URL }),
endpoints: (builder) => ({
postResource: builder.query({
// postBody in the parameter is received from the caller function.
//It is an object containing the payload
query: (postBody) => ({
url: 'someURL',
method: 'POST',
body: postBody
}),
transformResponse: (response) => response
}),
}),
});
// Export hooks for usage in functional components, which are
// auto-generated based on the defined endpoints
export const { usePostResourceQuery } = createResource;
如果我想在另一个组件或另一个地方使用这个变异的相同结果,如何在不创建相同负载的情况下做到这一点?我必须将结果分派到不同的切片中存储它吗?或者我们可以以某种方式引用从上述变异中接收到的结果吗?
1条答案
按热度按时间h9vpoimq1#
理想情况下,不期望Mutations(POST/ PUT)返回静止的任何东西,而是应该配置为使查询
tags
无效,以便可以重新触发fetch。但是,我确实明白了在某些情况下(为了获取数据),必须触发mutation。所以,有两种方法可以达到同样的效果(获得对突变的React):
1.当使用
useMutation
时,一旦组件卸载(基本上是取消订阅),变异结果就会从rtk-query's
存储键即api
中删除。因此,唯一的选择是将结果保存在单独的存储键(切片)中,以便以后引用。1.使用
fixedCacheKey
选项标记变异,并使用dipatch
操作方法触发变异,这基本上解释为subscribed
,然后让订阅生效(不取消订阅),以便响应停留在rtk-query's
存储密钥(api
)中,您可以在需要时查询该密钥。现在,要得到响应回来,在任何其他组件,可能是在同一个页面或完全不同的路线,查询回来与相同的关键字:
如果变异及其结果存在于存储中,您将取回数据。
有用的链接:
谢谢你曼尼什