С клиентом GraphQL Apollo, как установить поля @client для хранения в объекте кэша?

#graphql #apollo #react-apollo

#graphql #apollo #реагировать-apollo

Вопрос:

У меня есть набор запросов Apollo, как показано ниже.

 query { 
  speakers {
    id
    name
    checkBoxField @client
  }
}
  

У меня установлена политика полей следующим образом:

 export const genericBoolean = cache.makeVar(false);

typePolicies: {
   Speaker: {
      fields: {
        checkBoxField: {
           read(checkBoxField = false) {
             return genericBoolean === true ? "true" : "false";
           ...
  

На моей странице есть кнопка, в которой я использую определенный useQuery, и эта кнопка выполняет код:

 onClick : genericBoolean(true)
  

Когда я сбрасываю (JSON.stringify) данные, возвращенные из useQuery, поле флажка меняется на true для всех строк, как и ожидалось, но в моем кэше Apollo (как видно из расширения Chrome) для поля флажка не сохранено поле. Я хочу, чтобы это было там, чтобы я мог перебирать свой кэш и получать значение set для каждой строки.

Ответ №1:

Согласно документам Apollo, вы можете использовать реактивные переменные ИЛИ кэш клиента Apollo для хранения локального состояния: https://www.apollographql.com/docs/react/local-state/managing-state-with-field-policies/#storing

В приведенном выше примере используются реактивные переменные. Чтобы сохранить ваши данные в кэше, вам нужно будет использовать writeQuery или writeFragment : https://www.apollographql.com/docs/react/local-state/managing-state-with-field-policies/#storing-local-state-in-the-cache