Как установить fetchpolicy глобально на запросы apollo-client?

У меня есть несколько мутаций, которые должны вызвать некоторые refetchQueries, но мне нужно, чтобы эти запросы имели fetchpolicy, отличную от default.

есть ли способ установить fetchPolicy глобально вместо каждого запроса? Поэтому, чтобы избежать установки fetchPolicy для каждого запроса.

2 ответов


теперь это возможно!

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


к сожалению, я не думаю, что есть документированный способ установки политики по умолчанию для вашего клиента. Я думаю, что на самом деле недавно был разговор о настройка по умолчанию.

на данный момент, однако, вы можете просто создать простую оболочку для 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 контейнер. Эта воля также вы можете переопределить значение по умолчанию, установленное для любого отдельного запроса, если это необходимо.