如何使用Apollo CacheRedirects

时间:2019-07-18 15:02:18

标签: apollo apollo-client

我们在React项目中使用apollo-client。我们在所有列表查询的顶部设置了一个游标级别。例如:

query MediaList($mediaIds: [ID!], $type: [MediaType!], $userId: ID!) {
  user {
    id
    medias_cursor(all_medias: true, active: true, ids: $mediaIds) {
      medias {
        id
        type
        category
        name
      }
    }
  }
}

现在对于不同的MediaList查询,媒体对象可能已存在于缓存中,但是我们不能使用它来跳过网络查询。例如: 在查询medias_cursor({"all_medias":true,"active":true,"ids":["361","362","363"]})之后, 我们已经在这里获得了三个Media对象-(Media:361Media:362Media:363)。 因此,当我们尝试查询medias_cursor({"all_medias":true,"active":true,"ids":["361","363"]}时,我们应该已经在缓存中拥有了所需的一切。但是现在,阿波罗的默认行为只会通过缓存并进入网络。

我们试图添加cacheRedirects配置来解决以下问题:

  const cache = new InMemoryCache({
    cacheRedirects: {
      User: {
        medias_cursor: (_, { ids }, { getCacheKey }) => {
          if (!ids) return undefined

          return {
            medias: map(ids, id => {
              return getCacheKey({ __typename: 'Media', id: id })
            })
          }
        },
      },
    },
  })

我们期望cacheRedirects可以帮助我们在可用时使用缓存,但是现在无论如何它都会跳过缓存。

0 个答案:

没有答案