【发布时间】:2021-11-14 12:16:12
【问题描述】:
假设我有一个 RESTish API 来管理“帖子”。
-
GET /posts返回所有帖子 -
PATCH /posts:id更新帖子并回复新记录数据
我可以通过这样的方式使用 RTK 查询来实现这一点:
const TAG_TYPE = 'POST';
// Define a service using a base URL and expected endpoints
export const postsApi = createApi({
reducerPath: 'postsApi',
tagTypes: [TAG_TYPE],
baseQuery,
endpoints: (builder) => ({
getPosts: builder.query<Form[], string>({
query: () => `/posts`,
providesTags: (result) =>
[
{ type: TAG_TYPE, id: 'LIST' },
],
}),
updatePost: builder.mutation<any, { formId: string; formData: any }>({
// note: an optional `queryFn` may be used in place of `query`
query: (data) => ({
url: `/post/${data.formId}`,
method: 'PATCH',
body: data.formData,
}),
// this causes a full re-query.
// Would be more efficient to update state based on resp.body
invalidatesTags: [{ type: TAG_TYPE, id: 'LIST' }],
}),
}),
});
当updatePost 运行时,它会使LIST 标记无效,从而导致getPosts 再次运行。
但是,由于 PATCH 操作本身会使用新数据进行响应,因此我希望避免发出额外的服务器请求,而只需使用 response.body 的内容更新该特定记录的减速器状态。
似乎是一个常见的用例,但我很难找到任何有关执行此类操作的文档。
【问题讨论】: