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

React Apollo Client缓存中NEW_BOOKS与ALL_BOOKS查询结果混淆问题

问题根因

这是Apollo Client缓存键冲突导致的问题:relayStylePagination() 默认只会把 first/after/last/before 这几个标准Relay分页参数作为缓存区分的依据,不会自动识别你自定义的filters参数。两个查询虽然传入的过滤规则完全不同,但在缓存中会被判定为同一个books字段的查询,后触发的ALL_BOOKS查询结果会覆盖之前NEW_BOOKS的缓存结果,就出现了NEW_BOOKS数据变undefined、或者被替换成ALL_BOOKS结果的现象。

解决方案

你需要在relayStylePagination配置里指定要把filters参数也加入缓存键的计算逻辑,修改缓存配置如下:

const cache = new InMemoryCache({
    typePolicies: {
        Query: {
            fields: {
                // 传入keyArgs配置,指定filters参数也要作为缓存区分键
                books: relayStylePagination(["filters"]),
            },
        }
    },
});

补充说明

如果后续还有其他需要区分同字段不同查询的参数,也可以一并加在keyArgs的数组里,Apollo Client会把这些参数的取值组合起来生成唯一的缓存键,不同参数的查询就不会互相覆盖了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:24:07