readFragment返回类型为

时间:2019-03-10 22:57:26

标签: apollo-client

我正在使用Apollo Client,但确实从我的服务器请求了非常结构化的数据集。

-显示
id
标题
...
-季节
数字
-剧集
id
数字
广播

由于标准化,我的剧集是单独存储的,但我无法对其进行查询。例如,我想查询所有情节,然后按日期对它们进行排序以显示下一个。

我看到的唯一方法是要么将我的节目列表“缩小”为一集情节,然后进行过滤。或对服务器进行新查询。 但是,如果我可以获取缓存中所有情节的列表,它将更快。 不幸的是,使用readFragment只能按其ID查询一个对象。

问题: 有没有一种方法可以查询缓存中所有已定义类型的对象?

1 个答案:

答案 0 :(得分:0)

答案很晚,但可以帮助其他人,目前阿波罗不支持。这是来自github的问题,也是一个解决方法。 https://github.com/apollographql/apollo-client/issues/4724#issuecomment-487373566

这是@ superandrew213复制的解决方法

const serializedState = client.cache.extract()

const typeNameItems = Object.values(serializedState)
.filter(item => item.__typename === 'TypeName')
.map(item => client.readFragment({
  fragmentName: 'FragmentName',
  fragment: Fragment,
  id: item.id,
}))

请注意,此方法很慢,尤其是当您有大量标准化数据时。