Аполлон локальный запрос не работает с переменной - PullRequest
0 голосов
/ 23 марта 2020

Я использую React Apollo для управления локальным состоянием в своем приложении и пытаюсь выполнить запрос моего состояния, но с передачей переменной согласно их документации

Вот мой настройка:

состояние по умолчанию

const defaults {
  myItems: [
    {
      __typename: 'Item',
      itemId: '1'
    },
    {
      __typename: 'Item',
      itemId: '2'
    }
  ]
}

Мой компонент

import React, { PureComponent } from 'react';
import { Query } from 'react-apollo';
import gql from 'graphql-tag';

const LOCAL_ITEMS_QUERY = gql`
  query LOCAL_ITEMS_QUERY($itemId: String){
    myItems(itemId: $itemId) @client {
      __typename
      itemId
    }
  }
`;

class MyComponent extends PureComponent {
  render() {

    return (
      <div>
        <Query query={LOCAL_ITEMS_QUERY} variables={{ itemId: '1' }}>
          {myItems=> {
            console.log(myItems)
            return <div />
          }}
        </Query>
      </div>
    );
  }
}

export default MyComponent;

Вышеуказанный запрос в компоненте MyComponent возвращает массив с обоими элементами, в отличие от элемента с идентификатором элемента '1'.

Где я тут ошибся? Кажется, что можно запросить локальное состояние с переменными, но не уверен, почему это не работает для меня

1 Ответ

0 голосов
/ 23 марта 2020

Вы должны запросить один Item, например

const LOCAL_ITEM_QUERY = gql`
  query LOCAL_ITEM_QUERY($itemId: String){
    Item(id: $itemId) @client {
      __typename
      id
    }
  }
`;

... но это зависит от определений типов.

Обратите внимание, что id и __typename используются как ключ в кеше - не любой пользовательский с именем itemId. Прочитайте this

Локальные данные о состоянии (с @client) документированы здесь - локальный преобразователь может потребоваться для доступа по id или другим полям.

...