我最近开始将Apollo与React结合使用,并试图绕过缓存解析器。
我正在尝试构建一个简单的应用程序以查看有关电视节目/剧集的信息,我有Show
,Season
和Episode
的模型。
初始页面是一个节目列表,单击一个将显示有关该节目的信息和季节列表,然后单击一个季节将显示有关季节的信息和情节列表。
每个组件都包装在Query组件中,以获取其所需的数据。应用启动后,它将获取所有节目/季节的所有数据,因此所有将来的查询都应从缓存中获取数据。
我为节目添加了一个缓存解析器,该解析器可以正确地从缓存中加载节目:
cacheRedirects: {
Query: {
show: (_, { id }, { getCacheKey }) => getCacheKey({
__typename: 'Show',
id,
}),
},
}
我遇到麻烦的地方正在加载季节数据。查询是:
query ShowSeasons($showId: ID!) {
seasons(showId: $showId) {
number
year
}
}
数据已经在缓存中,与Show查询唯一的区别在于它是通过showId
而不是id
进行过滤的。
如果我使用Apollo开发工具查看缓存,则会看到Show
和Season
的条目如下:
Show:5beec2785e33a2132a43ad98
id: "5beec2785e33a2132a43ad98"
title: "Show Title"
seasons: [Season]
0: Season:5beee33a378803199f23e0e9
Season:5beee33a378803199f23e0e9
id: "5beee33a378803199f23e0e9"
number: 1
year: 2018
我尝试使用缓存解析器,但是每次尝试加载季节时,它都会发出另一个网络请求,而不是从缓存中获取它们。
我该如何编写一个解析器,以获取受showId
过滤的所有季节?