Apollo 客户端是否在 React 中缓存嵌套对象?

Does the Apollo client cache nested objects in React?

进行以下查询:

query Foo {
  foo {
    id
    bar(id: 1) {
      id
      baz
    }
  }
}

query Bar {
  bar(id: 1) {
    id
    baz
  }
}

有时,运行第二次查询会给我一个 bar 的缓存版本。其他时候,它不会,但我不确定这是因为查询是 运行 倍数还是因为这是 React 中 Apollo 客户端的默认行为。

不,它没有(至少截至 2019 年 11 月)。要在 Foo 查询 运行 时将 bar 对象放入缓存中,您需要像这样创建内存缓存:

import { InMemoryCache } from 'apollo-cache-inmemory';

const cache = new InMemoryCache({
  cacheRedirects: {
    Query: {
      bar: (_, args, { getCacheKey }) =>
        getCacheKey({ __typename: 'Bar', id: args.id })
    },
  },
});

另见: