默认情况下,Apollo Client 查询缓存的 TTL 为 5 秒。如果想要更改缓存时间,可以在创建 Apollo Client 实例时使用 cache 选项,并将 dataIdFromObject 函数与 typePolicies 选项结合使用。以下示例将查询缓存的 TTL 更改为 10 秒:
import { InMemoryCache } from '@apollo/client/cache';
const cache = new InMemoryCache({
  typePolicies: {
    Query: {
      fields: {
        // 设置一个自定义缓存时间
        someField: {
          // 如果没有指定的过期时间,则使用默认 TTL
          keyArgs: false,
          merge(existing, incoming, { readField }) {
            return existing;
          },
          // 将过期时间设置为 10 秒
          read(existing, { args, toReference }) {
            const reference = toReference({
              __typename: 'SomeType',
              id: args.id
            });
            const cachedData = existing?.[readField('someField', reference)];
            return cachedData?.expiresAt > Date.now()
              ? cachedData.data
              : undefined;
          },
          /* 设置过期时间 */
          merge(existing, incoming, { readField }) {
            const data = incoming as any;
            return {
              ...data,
              expiresAt: Date.now() + 10000, // 10 秒
            };
          },
        },
      },
    },
  },
});
const client = new ApolloClient({
  cache,
  uri: 'https://myapi.com/graphql',
});