Как я могу избежать «автообновления» кеша при использовании `act-apollo-hooks` и `useSubscription` hook - PullRequest
1 голос
/ 07 ноября 2019

У меня есть Apollo-Hooks код, который использует useSubscription для прослушивания изменений событий в подписке:

useSubscription<MySubscriptionUpdated>(MySubscription, {
    onSubscriptionData: async ({ client, subscriptionData: { data } }) => {
      if (!data) {
        return;
      }
      ...

Этот код автоматически обновляет кэш ответа, которыйв большинстве случаев отлично подходит

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

Кто-нибудь знает способ использования useSubscription ловушки, а не автоматически обновлять кеш?

Ответ, в конечном счете, всегда будет иметьсущность с __typename в нем.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019

Итак, вы можете обновить кеш вручную, это будет выглядеть примерно так

apollo.mutate({
  mutation: createTaskMutation,
  variables: item,
  update: (cache, { data }) => {
    try {
      let { allTasks } = cache.readQuery({ query: getTasks });
      allTasks.push(data);
      cache.writeQuery({ //
        query: getTasks,
        data: {
            'allTasks': allTasks
        }
      });
    } catch (e) {
        // We should always catch here,
        // as the cache may be empty or the query may fail
    }
});
0 голосов
/ 12 ноября 2019

Вы можете изменить fetchPolicy для каждой подписки. Значение по умолчанию cache-first. Для отключения кеша необходимо установить fetchPolicy на no-cache. Для получения более подробной информации см. официальный документ Apollo .

useSubscription<MySubscriptionUpdated>(MySubscription, {
    fetchPolicy: "no-cache",
    onSubscriptionData: async ({ client, subscriptionData: { data } }) => {
      if (!data) {
        return;
      }
      ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...