我有一些突变应该触发一些refetchQueries,但我需要这些查询的fetchPolicy不是默认值。
有没有办法全局设置fetchPolicy而不是每个查询?所以要避免在每个查询上设置fetchPolicy。
答案 0 :(得分:4)
现在可以!
const defaultOptions = {
watchQuery: {
fetchPolicy: 'cache-and-network',
errorPolicy: 'ignore',
},
query: {
fetchPolicy: 'network-only',
errorPolicy: 'all',
},
mutate: {
errorPolicy: 'all'
}
}
const client = new ApolloClient({
link,
cache,
defaultOptions,
})
请参阅文档:Apollo Client
答案 1 :(得分:1)
不幸的是,我认为没有一种记录方法可以为您的客户设置默认策略。我认为最近有一些关于making the default configurable的讨论。
但是,暂时可以为graphql
容器创建一个简单的包装器来实现相同的结果。这样的事情应该有效:
const DEFAULT_FETCH_POLICY = 'network-only'
export const graphqlWrapper = (query, config = {}) => {
if (!config.options) config.options = {}
if (config.options instanceof Function) {
const optionsFn = config.options
config.options = (props) => {
const options = optionsFn.apply(optionsFn, [props])
options.fetchPolicy = options.fetchPolicy || DEFAULT_FETCH_POLICY
return options
}
} else {
config.options.fetchPolicy = config.options.fetchPolicy || DEFAULT_FETCH_POLICY
}
return graphql(query, config)
}
然后只导入包装器而不是graphql
容器。这仍然允许您根据需要覆盖为任何单个查询设置的默认值。