要实现Apollo GraphQL中的数据预取,但是查询命中服务器而不是缓存加载,可以使用fetchPolicy
参数来指定查询的行为。以下是一个示例代码,展示如何使用fetchPolicy
来实现此功能:
import { ApolloClient, InMemoryCache, gql } from '@apollo/client';
const client = new ApolloClient({
uri: 'https://api.example.com/graphql',
cache: new InMemoryCache(),
});
const GET_USER = gql`
query GetUser($userId: ID!) {
user(id: $userId) {
id
name
email
}
}
`;
// 使用默认的fetchPolicy,查询将首先尝试从缓存中加载数据,然后再发起网络请求
client.query({
query: GET_USER,
variables: { userId: '123' },
}).then(result => {
console.log(result.data.user);
});
// 使用fetchPolicy为network-only,查询将直接从服务器加载数据,而不会从缓存中加载
client.query({
query: GET_USER,
variables: { userId: '123' },
fetchPolicy: 'network-only',
}).then(result => {
console.log(result.data.user);
});
在上述示例中,我们定义了一个名为GET_USER
的GraphQL查询,然后使用client.query
函数来发起查询请求。在第一个查询中,我们未指定fetchPolicy
,因此查询将首先尝试从缓存中加载数据,然后再发起网络请求。而在第二个查询中,我们将fetchPolicy
设置为network-only
,这将直接从服务器加载数据,而不会从缓存中加载。
通过使用不同的fetchPolicy
,你可以灵活控制数据的加载行为,从而实现预取数据但从服务器加载的需求。