Apollo Client缓存返回错误数据:参数变更后返回旧数据的问题求助
Apollo Client缓存返回错误数据:参数变更后返回旧数据的问题求助
我遇到了Apollo Client缓存的一个棘手问题,参数变更后缓存居然返回了旧的错误数据,想请各位帮忙排查一下问题所在!
问题场景
首先我调用useGetData时传入包含test1和test2过滤器的参数,数据成功获取并存入缓存。之后我关闭test2过滤器发起新请求,新数据加载完成后,过了1秒却又变回了之前的旧数据。
为了调试,我给InMemoryCache添加了一个临时的字段策略,在getData字段的处理函数里打了断点,结果发现缓存里第一个请求没有带test2过滤器,但后续请求又包含了这个过滤器。可我明明只在一处使用了useEffect,而且反复确认它没有再传入带test2的参数,实在搞不懂为什么会出现两个请求。
相关代码片段
初始参数示例:
params = { filters: [{ type: "test1"}, {type: "test2"}], offset: 0, limit: 9 }
useGetData的调用代码:
const query = useGetData({ variables: params, notifyOnNetworkStatusChange: true, });
用于调试参数的InMemoryCache配置:
{ typePolicies: { Query: { fields: { getData: (existing, args) => { return existing }, } } } }
预期与实际结果
预期结果:Apollo缓存根据调用时传入的参数,返回对应正确的数据
实际结果:传入新参数后,返回的却是旧的错误数据(用不同参数获取的历史数据)
技术栈补充
我们使用Node.js、React和Next.js进行SSR渲染,SSR阶段获取的数据会存入Apollo缓存,所以前端初始化时会直接从缓存读取数据。
实际发生的例子
- 当使用带
test1和test2过滤器的参数时,获取到的数据是[val1, val2] - 当发起不带
test2过滤器的新请求时,一开始拿到的是正确的[val1,val3],但1秒后缓存就把旧数据[val1,val2]返回了
备注:内容来源于stack exchange,提问作者lukasmaska98
相关产品推荐
相关产品推荐

