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

刚接触RTK Query,请教Tags的定义、用途及相关参考资料

RTK Query 中 Tags 的核心作用与用法解释

什么是 Tags?

Tags 就是 RTK Query 给缓存数据打的「分类标签」,核心目的是帮你精准控制缓存的失效和自动更新。简单说,你给不同的请求缓存贴上对应的标签,之后只要触发某个修改操作,就能通过标签让关联的缓存自动刷新,不用手动去调刷新接口。

核心用法场景

  • 自动同步修改后的数据:比如你做了新增用户的操作,只要给新增请求配置invalidatesTags: ['User'],所有贴了User标签的缓存(比如用户列表请求)就会自动失效并重新拉取最新数据,不用你再手动调用获取用户列表的方法。
    示例代码:
    const userApi = createApi({
      reducerPath: 'userApi',
      baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
      tagTypes: ['User'], // 提前声明要用到的标签类型
      endpoints: (builder) => ({
        // 获取用户列表,缓存贴User标签
        getUsers: builder.query({
          query: () => '/users',
          providesTags: ['User'],
        }),
        // 新增用户,使User标签的缓存失效
        addUser: builder.mutation({
          query: (newUser) => ({
            url: '/users',
            method: 'POST',
            body: newUser,
          }),
          invalidatesTags: ['User'],
        }),
      }),
    });
    
  • 精准控制单个缓存的失效:如果是处理单个资源(比如某一个用户),可以给标签加上ID标识,这样修改单个用户时,只会让这个用户的缓存失效,不会影响整个用户列表。
    示例代码:
    // 获取单个用户,根据用户ID生成带标识的标签
    getUser: builder.query({
      query: (userId) => `/users/${userId}`,
      providesTags: (result, error, userId) => [{ type: 'User', id: userId }],
    }),
    // 更新单个用户,只失效对应ID的用户缓存
    updateUser: builder.mutation({
      query: ({ id, ...data }) => ({
        url: `/users/${id}`,
        method: 'PUT',
        body: data,
      }),
      invalidatesTags: (result, error, { id }) => [{ type: 'User', id: id }],
    }),
    

几个关键参数的区别

  • providesTags:告诉RTK Query「这个请求的缓存属于哪些标签」,相当于给缓存贴标签。
  • invalidatesTags:告诉RTK Query「这个请求执行后,哪些标签的缓存要失效」,相当于触发关联缓存的刷新。
  • tagTypes:在API切片的顶层声明所有要用到的标签类型,相当于提前注册标签分类,避免拼写错误或者乱加标签。

常见坑点

  • 别乱用全局标签:如果所有请求都贴同一个标签,一个小修改就会触发一堆缓存刷新,浪费资源。
  • 动态标签要对应参数:如果请求依赖参数(比如用户ID),一定要根据参数生成带标识的标签,不然缓存控制会不精准,比如修改了用户A,结果用户B的缓存也被刷新了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 11:12:36