如何为RTK Query的可用待派包裹查询设置缓存失效周期?
解决RTK Query缓存过期与数据更新问题
方案一:直接设置缓存过期时长
RTK Query原生支持通过keepUnusedDataFor字段指定缓存保留时长,单位为秒。你可以直接在查询配置中添加该字段,将缓存失效时间设为5秒:
getParcelsAvailableForDispatch: builder.query({ query: () => `${SLICE_URL}/available-for-dispatch`, providesTags: (result, error, id) => [{ type: 'Parcel', id }], // 设置缓存在数据未被使用时5秒后自动失效 keepUnusedDataFor: 5, }),
注意:该配置仅在数据不再被任何组件订阅时生效,若组件持续挂载(比如用户停留在列表页面),缓存不会自动过期,此时需结合其他方式触发更新。
方案二:通过标签关联实现即时缓存失效(更推荐)
虽然你提到分派操作的标签与查询标签不一致,但可以调整标签策略,让分派操作直接触发可用包裹列表的缓存失效,用户完成分派后能立刻看到最新数据,比等待缓存过期更高效。
步骤1:修改查询的标签配置
为可用待派包裹列表设置唯一的标签标识:
getParcelsAvailableForDispatch: builder.query({ query: () => `${SLICE_URL}/available-for-dispatch`, // 用固定ID标识该列表的标签,区别于单个包裹的标签 providesTags: [{ type: 'Parcel', id: 'AVAILABLE_DISPATCH_LIST' }], }),
步骤2:在分派操作的Mutation中添加失效标签
更新分派包裹的Mutation配置,使其失效上述列表标签:
// 假设你的分派Mutation名为dispatchParcel dispatchParcel: builder.mutation({ query: (dispatchPayload) => ({ url: `${SLICE_URL}/dispatch`, method: 'POST', body: dispatchPayload, }), // 触发可用包裹列表的缓存失效,自动重新获取数据 invalidatesTags: [{ type: 'Parcel', id: 'AVAILABLE_DISPATCH_LIST' }], }),
这样每次执行分派操作后,RTK Query会自动重新发起getParcelsAvailableForDispatch查询,用户返回列表页面时就能看到已移除分派包裹的最新列表。
内容的提问来源于stack exchange,提问作者japheth
相关产品推荐
相关产品推荐

