Как получить значение из состояния клиента Apollo graphql - PullRequest
0 голосов
/ 14 мая 2018

Глядя на Состояние ссылки Apollo Я вижу, как записать / обновить значение в локальном хранилище / кэше, используя мутацию или напрямую, используя cache.writeData({ data }).

Но какя получить это кэшированное значение напрямую, чтобы использовать в качестве переменной для мутации?Или мне нужны запросы с цепочкой 2, использующие @client для первого?

Примечание: если я использую ApolloProvider, я получаю доступ к кешу, но это выглядит так: {cache.cache.data.$ROOT.data.myVariable}

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете вложить компонент Mutation в компонент Query.Как ниже.Если вы делаете это много, вы можете создать свой собственный компонент-обертку.

Или вы можете сделать client.readQuery, как показано в документации: https://www.apollographql.com/docs/react/advanced/caching.html#readquery.

const ADD_TODO = gql`
  mutation addTodo($type: String!) {
    addTodo(type: $type) {
      id
      type
    }
  }
`;

<Query query={gql`
  {
    myVariable @client
  }
`>
 {({ data: { myVariable }}) => {

  return (
    <Mutation mutation={ADD_TODO}>
      {(addTodo, { data }) => (
        <div>
          <form
            onSubmit={e => {
              e.preventDefault();
              addTodo({ variables: { type: myVariable } });
              input.value = "";
            }}
          >
            <input
              ref={node => {
                input = node;
              }}
            />
            <button type="submit">Add Todo</button>
          </form>
        </div>
      )}
    </Mutation>
</Query>
...