RTKQ中向selectFromResult、onQueryStarted传递cacheKey的推荐方法
RTKQ cacheKey 存储复用官方方案
- 不要手动存储生成后的
cacheKey
RTKQ内部会根据接口调用时传入的参数自动计算cacheKey,官方推荐直接存储原始调用参数作为缓存的唯一标识,不需要维护cacheKey本身。你可以通过api.endpoints.<yourEndpoint>.select(<queryArgs>)生成对应缓存条目的selector,在selectFromResult等任意可以访问Redux store的位置获取对应缓存数据,逻辑更稳定也不需要关心RTKQ内部的cacheKey生成规则。 - 生命周期回调可直接获取关联上下文
onQueryStarted、transformResponse、onCacheEntryAdded等RTKQ内置生命周期回调的入参中,已经包含了当前请求的调用参数、缓存条目实例、请求ID等信息,你可以直接在回调内定位当前缓存,不需要提前存储cacheKey。 - 同组件上下文直接读取hook返回值
在调用useQuery/useLazyQuery的组件内,cacheKey相关的关联标识可以直接从hook的返回值中获取,不需要额外存储。
你当前将
cacheKey存入自定义slice的方案不推荐长期使用。cacheKey属于RTKQ内部运行时生成的标识,官方没有对外承诺其生成规则的长期稳定性,后续版本迭代可能会导致你的存储逻辑失效,同时手动维护cacheKey的写入、清除逻辑也容易出现数据不同步的问题。
内容的提问来源于stack exchange,提问作者radulle
相关产品推荐
相关产品推荐

