Кеш Аполлона не обновляется после мутации - PullRequest
1 голос
/ 23 января 2020

Кэш Apollo не обновляется после мутации, я не хочу вручную обращаться к кешу, поэтому методы writeQuery и readQuery для обновления кеша отсутствуют. Метод update с readQuery и writeQuery обновлял кеш, но я не хочу его обновлять. Я хочу, чтобы он получал обновление автоматически. Я также использовал refetchQueries, вызывался API, и я получал данные fre sh с сервера в качестве ответа, но он не обновляет кеш, а в кеш-памяти все еще есть старые данные. Я вызвал query для выборки данных fre sh после выполнения мутации, но он возвращал мне устаревшие данные из кэша. политика извлечения - кеш-и-сеть . Вот как я хочу, чтобы все работало: После выполнения мутации я вызову запрос к серверу, чтобы получить данные fre sh, и он должен обновить кэш данными fre sh.

async deleteFamilyMember () {
      await this.$apollo
        .mutate({
          mutation: DELETE_FAMILY_MEMBER,
          variables: {
            familyMemberId: this.memberToDelete
          }
        })
        .then(response => {
          this.getFamilyMembers()
        })
        .catch(err => console.log(err))
    }

 async getFamilyMembers () {
      await this.$apollo
        .query({
          query: FAMILY_MEMBERS
        })
        .then(response => {
          this.familyMembers = response.data.familyMembers
          this.$store.commit('SET_FAMILY_MEMBERS', response.data.familyMembers)
        })
        .catch(err =>
          console.log('Error fetching family members details', err)
        )
    }

1 Ответ

1 голос
/ 05 февраля 2020

Вместо использования этого. $ Apollo.query () используйте это. $ Apollo.watchQuery () Метод watchQuery возвращает объект QueryRef, у которого есть свойство change values, которое является Observable. Observable будет выдавать только один раз, когда запрос будет завершен, и загрузка будет установлена ​​в false, если вы не установите для параметров watchQuery notifyOnNetworkStatusChange значение true. Как только запрос завершится, он также будет содержать объект данных. Поэтому, если какой-то другой запрос извлекает новую информацию, этот компонент будет обновляться, чтобы оставаться согласованным.

Подробнее читайте Документы

      await this.$apollo
        .watchQuery({
          query: FAMILY_MEMBERS
        })
        .subscribe({
          next: ({ data }) => {
            console.log("DATA", data);
            this.familyMembers = data.familyMembers;
            this.$store.commit(SET_FAMILY_MEMBERS, data.familyMembers);
          },
          error: e => console.error("Error fetching family members details", e)
        });
    }
...