要解决Apollo的watchQuery方法忽略传递的变量的问题,可以使用Apollo提供的fetchPolicy选项来控制查询的行为。fetchPolicy选项可以设置为"network-only",这将强制Apollo忽略本地缓存并直接向服务器发送查询请求。
以下是一个示例代码,展示如何使用fetchPolicy选项来忽略传递的变量:
import { ApolloClient, InMemoryCache, gql } from '@apollo/client';
const client = new ApolloClient({
uri: 'https://example.com/graphql',
cache: new InMemoryCache(),
});
const MY_QUERY = gql`
query MyQuery($variable: String!) {
queryName(variable: $variable) {
// query fields
}
}
`;
// 使用watchQuery方法并设置fetchPolicy选项为"network-only"
client.watchQuery({
query: MY_QUERY,
variables: { variable: 'value' },
fetchPolicy: 'network-only',
}).subscribe({
next: (result) => {
// 处理查询结果
},
error: (error) => {
// 处理查询错误
},
});
在上面的代码中,我们通过将fetchPolicy选项设置为"network-only",告诉Apollo忽略本地缓存并直接向服务器发送查询请求。这样,即使传递了变量,Apollo也会忽略它们并每次都从服务器获取最新的数据。