默认情况下,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',
});