Кэш клиента Apollo не обновляется

#reactjs #graphql #apollo #react-apollo

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

Вопрос:

Я использую сервер / клиент Apollo, и кэш, похоже, не работает при изменениях обновлений. (Создать, удалить). Сервер обновляется, но на интерфейсе ничего не происходит. Я должен перезагрузить страницу, чтобы показать новый элемент / показать изменение элемента.

Я следил за документами Apollo и смоделировал его после их реализации в изолированной среде. Дайте мне знать, если вам понадобится больше моего кода, спасибо.

Вот мой код:

       <form
        onSubmit={(e) => {
          e.preventDefault();
          createUser(
            {
              variables: {
                name: input.value,
                email: input.value,
                password: input.value
              }
            },
            {
              update(cache, { data: { createUser } }) {
                cache.modify({
                  fields: {
                    allUsers(existingUsers = []) {
                      const newUser = cache.writeFragment({
                        data: { createUser },
                        fragment: gql`
                          fragment NewUser on User {
                            name
                            email
                          }
                        `
                      });
                      return existingUsers.concat(newUser);
                    }
                  }
                });
              }
            }
          );
        }}
      >
 

Ответ №1:

Вам необходимо указать id свойство в writeFragment методе. Вот пример в документах:

 client.writeFragment({
  id: '5',
  fragment: gql`
    fragment MyTodo on Todo {
      completed
    }
  `,
  data: {
    completed: true,
  },
});

 

Кроме того, writeFragment возвращает void , поэтому вам нужно использовать, readFragment чтобы получить нужные данные, или просто использовать данные, доступные в результате мутации

Комментарии:

1. Я вижу это сейчас в документах — для обновления объектов в кэше. Я немного дальше, пытаясь добавить новый объект.

2. Я понял это — мне пришлось присоединить его к фактическому перехвату, а не к вызову перехватчика.