保存和删除操作后,Apollo客户端状态管理缓存不会自动更新

时间:2020-05-27 14:49:01

标签: apollo-client

我正在使用apollo-client进行graphql调用,并在包apollo-client中添加了状态管理功能。在graphql模块中,将分配给InMemoryCache的缓存变量和客户端变量导出。客户端变量导入到组件中,因此默认执行get调用后,数据在client.cache.data中可用,但我想在保存和删除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 :(得分:0)

我只将apollo客户端与React一起使用,但希望可以阐明它的工作方式。为了使此操作“自动”发生,您要么需要调用refetchQueries即可在突变后重新获取fORoomType,也可以手动更新缓存。我注意到您的回复未返回id属性,因此它将如何知道要更新哪个属性?如果存在不称为“ id”的标识符,请在this documentation之后注册。

这里是您想要的文档的常规链接

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