如何在apollo-client查询中全局设置fetchPolicy?

时间:2017-09-15 19:04:20

标签: graphql-js react-apollo apollo-client

我有一些突变应该触发一些refetchQueries,但我需要这些查询的fetchPolicy不是默认值。

有没有办法全局设置fetchPolicy而不是每个查询?所以要避免在每个查询上设置fetchPolicy。

2 个答案:

答案 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容器。这仍然允许您根据需要覆盖为任何单个查询设置的默认值。