Мне нужно установить для моего кэша клиента Apollo значения по умолчанию

У меня есть приложение React, использующее Apollo Client. Я использую apollo-link-state и apollo-cache-persist, и мне нужно сбросить мой магазин до значений по умолчанию, когда client.resetStore() вызывается в моем приложении.

В документации говорится, что при создании клиента вы должны вызвать client.onResetStore(stateLink.writeDefaults), и это выполнит работу, но writeDefaults предоставляется Apollo Link State, к которому у меня нет прямого доступа, поскольку я использую Apollo Boost.

Вот мой код клиента Apollo:

import ApolloClient from 'apollo-boost';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { persistCache } from 'apollo-cache-persist';
import { defaults, resolvers } from "./store";

const cache = new InMemoryCache();

persistCache({
  storage: window.localStorage,
  debug: process.env.NODE_ENV !== 'production',
  cache
});

const client = new ApolloClient({
  uri: process.env.NODE_ENV === 'production' ? 'https://five-yards-api.herokuapp.com/graphql' : 'http://localhost:7777/graphql',
  credentials: 'include',
  clientState: {
    defaults,
    resolvers
  },
  cache
});

// TODO: Doesn't work as expected
client.onResetStore(client.writeDefaults);

export default client;
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
1 139
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

AFAIK единственный способ сделать это - перейти с Apollo Boost, который настраивает для вас много вещей и настраивает Apollo Client вручную. После миграции я смог вызвать onResetStore() в соответствии с документацией, и все работает :)

Миграция Apollo Boost: https://www.apollographql.com/docs/react/advanced/boost-migration.html

Я использую Apollo Client 2.x, и Apollo Boost может быть таким же. У меня была такая же проблема с Apollo Client 2.x, и решение было для меня ниже. В корневом файле, в котором вы настраиваете Apollo (например, App.js):

cache.writeData({data : defaultData });  # I assume you already have this to initialise your default data.

# Then, you just add below underneath.
client.onResetStore(() => {
  cache.writeData({data : defaultData });
});

const App = () => (...

Другие вопросы по теме