You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RTK Query中实现任务增删时自动重获取getBoardById接口

解决添加/删除任务后自动刷新单个Board数据的问题

要实现添加或删除任务后自动重新获取getBoardById接口,需要利用RTK Query的标签失效机制,通过更细粒度的标签控制精准刷新目标查询,而非全局刷新所有Board相关数据。以下是具体修改方案:

1. 优化Board API切片的标签配置

修改boardApi,将标签从全局的'Boards'改为带ID的细粒度标签,精准定位单个Board的查询:

export const apiBoardSlice = createApi({
  reducerPath: 'apiBoardSlice',
  baseQuery: fetchBaseQuery({
    baseUrl: API_URL,
    prepareHeaders: headers => headers.set('Authorization', `Bearer ${token}`)
  }),
  tagTypes: ['Boards'],
  endpoints: (builder) => ({
    getBoards: builder.query({
      query: () => 'board',
      providesTags: ['Boards'],
    }),
    getBoardById: builder.query({
      query: (id) => `board/${id}`,
      // 返回带ID的标签,标识单个Board的数据
      providesTags: (result, error, id) => [{ type: 'Boards', id }],
    }),
    addBoard: builder.mutation({
      query: payload => ({
        url: 'board',
        method: 'POST',
        body: payload,
      }),
      invalidatesTags: ['Boards'],
    }),
  }),
})

2. 修改Task API切片,添加标签失效逻辑

在taskApi中声明要使用的标签类型,并在任务操作的mutation中指定要失效的单个Board标签:

export const apiTaskSlice = createApi({
  reducerPath: 'apiTaskSlice',
  baseQuery: fetchBaseQuery({
    baseUrl: API_URL,
    prepareHeaders: headers => headers.set('Authorization', `Bearer ${token}`)
  }),
  tagTypes: ['Boards'], // 声明要使用的Board标签类型
  endpoints: (builder) => ({
    addCard: builder.mutation({
      query: ({ listId, title, boardId }) => ({
        url: `task/${boardId}`,
        method: 'POST',
        body: { title, listId },
      }),
      // 失效对应boardId的标签,触发getBoardById重新请求
      invalidatesTags: (result, error, { boardId }) => [{ type: 'Boards', id: boardId }],
    }),
    deleteTask: builder.mutation({
      query: ({ taskId, boardId }) => ({
        url: `task/${taskId}`,
        method: 'DELETE',
      }),
      // 删除任务后同样刷新对应Board的数据
      invalidatesTags: (result, error, { boardId }) => [{ type: 'Boards', id: boardId }],
    }),
  }),
})

改动说明

  • 细粒度标签:getBoardById返回带ID的标签,确保只有该ID对应的查询会被刷新,不会影响其他Board或全局列表的查询。
  • 跨切片同步:Task API通过声明tagTypes: ['Boards'],可以直接复用Board API的标签类型,实现跨切片的状态同步。
  • 精准触发:每次添加/删除任务时,通过传入的boardId指定要失效的标签,自动触发getBoardById重新获取最新数据。

内容的提问来源于stack exchange,提问作者Yudi Krisnandi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:37:34