使用Apollo缓存解析器进行过滤

时间:2018-11-19 08:50:40

标签: reactjs apollo react-apollo apollo-client

我最近开始将Apollo与React结合使用,并试图绕过缓存解析器。

我正在尝试构建一个简单的应用程序以查看有关电视节目/剧集的信息,我有ShowSeasonEpisode的模型。

初始页面是一个节目列表,单击一个将显示有关该节目的信息和季节列表,然后单击一个季节将显示有关季节的信息和情节列表。

每个组件都包装在Query组件中,以获取其所需的数据。应用启动后,它将获取所有节目/季节的所有数据,因此所有将来的查询都应从缓存中获取数据。

我为节目添加了一个缓存解析器,该解析器可以正确地从缓存中加载节目:

cacheRedirects: {
    Query: {
        show: (_, { id }, { getCacheKey }) => getCacheKey({
            __typename: 'Show',
            id,
        }),
    },
}

我遇到麻烦的地方正在加载季节数据。查询是:

query ShowSeasons($showId: ID!) {
    seasons(showId: $showId) {
        number
        year
    }
}

数据已经在缓存中,与Show查询唯一的区别在于它是通过showId而不是id进行过滤的。

如果我使用Apollo开发工具查看缓存,则会看到ShowSeason的条目如下:

Show:5beec2785e33a2132a43ad98
    id: "5beec2785e33a2132a43ad98"
    title: "Show Title"
    seasons: [Season]
        0: Season:5beee33a378803199f23e0e9

Season:5beee33a378803199f23e0e9
    id: "5beee33a378803199f23e0e9"
    number: 1
    year: 2018

我尝试使用缓存解析器,但是每次尝试加载季节时,它都会发出另一个网络请求,而不是从缓存中获取它们。

我该如何编写一个解析器,以获取受showId过滤的所有季节?

0 个答案:

没有答案