Местное государство Аполлон - как сделать запрос по идентификатору - PullRequest
0 голосов
/ 23 февраля 2020

Если у нас есть элементы задач, такие как массив объектов, в кэше состояния клиента apollo - задачи: [{name: 'First', id: 1}, {name: 'Second', id: 2}]. Есть ли способ запроса по id только того объекта, который нам нужен. Что-то вроде повторного выбора - селектор в редуксе. Я хочу подписаться по id.

1 Ответ

2 голосов
/ 24 февраля 2020

Apollo позволяет вам управлять локальным состоянием с помощью директив @client. Таким образом, вы можете создать запрос, подобный приведенному ниже, чтобы получить один TODO на основе идентификатора.

query getTodoById(id: ID!) @client {
  todo {
    name,
    id
  }
}

mutation setTodoById(id: ID!, todo: Todo!) @client {
  todo {
    name,
    id
  }
}

Теперь вам нужно создать собственный клиентский преобразователь для запроса выше, чтобы Apollo знал, где он должен искать данные в кеше. Пользовательский распознаватель примет аргумент с именем getCachedKey, который генерирует ключ объекта на основе typename & Id. Apollo использует этот сгенерированный идентификатор из пользовательского распознавателя для поиска данных в кэше (список задач).

Ваш настраиваемый распознаватель клиентов должен выглядеть примерно так:

  cacheRedirects: {
    Query: {
      todo: (_, args, { getCacheKey }) =>
        getCacheKey({ __typename: 'Todo', id: args.id })
    },
  };

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...