apollo-link-state и как мне получить доступ к локальному состоянию / кешу? - PullRequest
0 голосов
/ 06 февраля 2019

Возможно, я просто не понимаю, что делает apollo-link-state, но я подумал, что если бы у меня было значение "по умолчанию", ЭТО появилось бы в моих реквизитах через провайдера.Тем не менее, я не могу найти это.Как вы получаете доступ к «кешу» или локальному состоянию?

У меня есть:

import { ApolloClient, createNetworkInterface } from 'react-apollo';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { withClientState } from 'apollo-link-state';
import dataIdFromObject from './dataIdFromObject';

const defaults = {
  NAME: 'Biff'
};
const resolvers = {};

const cache = new InMemoryCache();
const stateLink = withClientState({ cache, resolvers, defaults });

const apolloClient = new ApolloClient({
  cache,
  link: stateLink,
  networkInterface: createNetworkInterface({
    uri: `${config.url}/graphql`,
    opts: {
      credentials: 'include'
    }
  }),
  addTypename: true,
  dataIdFromObject
});

Я передаю пустой объект для моих распознавателей, поскольку абсолютно бессмысленно копировать всередукторы, которые есть в бэкэнде.Я подумал, что увижу «имя: Бифф» в реквизите.Нет.

Магазин - это мой "магазин", и он не является частью этого вопроса.Я рассчитывал с этой "клиентской" опорой, я бы увидел свой дефолт.Нет.

  <ApolloProvider store={this.props.store} client={apolloClient}>

когда я регистрирую свои реквизиты в дочернем компоненте, никаких признаков кеша или "name: Biff" нигде нет.Как мне добраться до этого локального состояния в моих дочерних компонентах.Если я обновлю его с помощью мутации, я должен увидеть, как мои компоненты обновляются и имеют доступ к этому новому обновленному локальному состоянию ... но ... где это?

1 Ответ

0 голосов
/ 06 февраля 2019

Как указано в документации, вы запрашиваете ваше локальное состояние точно так же, как вы запрашиваете удаленный сервер, за исключением того, что вы указываете директиву @client, чтобы сообщить Apollo, что вы запрашиваете что-то через apollo-link-state.Поэтому нам нужен запрос GraphQL, обернутый буквенным тегом шаблона graphql-tag:

const GET_NAME = gql`
  query {
    NAME @client
  }
`

И мы используем его, как и любой другой запрос:

<Query query={GET_NAME}>
  {({ loading, error, data }) => {
    // render appropriate component depending on loading/error state
  }}
</Query>

В то время как Apollo предоставляет методы для чтение и запись в кэш , они должны использоваться только в контексте создания мутаций для вашего локального состояния.Запросы к кешу должны выполняться с помощью компонента Query, а фактическое изменение кеша - с помощью компонента Mutation.Вы можете прочитать больше о написании собственных мутаций в документации.

...