Кэш управления состоянием Apollo-client не обновляется автоматически после операции сохранения и удаления - PullRequest
0 голосов
/ 27 мая 2020

Я использую apollo-client для вызовов graphql вместе с добавлением управления состоянием в пакете apollo-client. В модуле graphql назначается InMemoryCache для переменной кеширования, а переменная клиента экспортируется. Переменная клиента импортируется в компонент, поэтому данные доступны в client.cache.data после выполнения вызова get по умолчанию, но я хочу обновить кеш клиента после успешного сохранения и удаления операций graphql обратные вызовы

Вот мой graphql.module.ts:

    import {NgModule} from '@angular/core';
    import {ApolloModule, APOLLO_OPTIONS} from 'apollo-angular';
    import { ApolloClient } from 'apollo-client';
    import {InMemoryCache} from 'apollo-cache-inmemory';
    import { HttpLink } from 'apollo-link-http';

    const cache = new InMemoryCache();
    const link = new HttpLink({
        uri:'https://api.graph.cool/simple/v1/ciyz901en4j590185wkmexyex'   
    });

    export var client = new ApolloClient({
      cache,
      link
    });
 @NgModule({ 
 })

и моя реализация вызова службы

client
      .query({
        query: gql`
        {         
          fORoomTypes()
          {
            nodes
            {
              roomTypeId
              roomType
              ratSingle
              ratDouble
              ratExtra
              statu
            }
          }
        }        
      `,
      })
      .then(result => {      
        callback(result);
      });    

после обратного вызова client.cache.data содержит данные, я хочу вызывать эти данные с помощью запросов кеша, и я хочу автоматически обновлять кеш, это моя реализация службы сохранения

  const post = gql`
      mutation
      {
        saveRtype(rt:
          {
            rty:
            {            
              rt:"Club room"
              rat:4000
              cchub:4500
              ext:800
              statu:1             
            }               
            traCheck:1
          }
          )
      }
    `
    client.mutate({
      mutation: post
    }).then((data) => {
      callback(data)
    });

1 Ответ

0 голосов
/ 29 мая 2020

Я использовал только клиент apollo с React, но, надеюсь, могу пролить свет на его работу. Чтобы это произошло «автоматически», вам нужно либо вызвать refetchQueries для повторного получения fORoomTypes после мутации, либо вручную обновить кеш. Я заметил, что ваши ответы не возвращают свойство id, так как он узнает, какое из них нужно обновить? Если есть идентификатор, который не называется "id", то зарегистрируйте его, следуя этой документации .

Вот ссылка на общую документацию по тому, что вы хотите

https://www.apollographql.com/docs/angular/features/cache-updates/

...