React-Native + Apollo-Link-State + AWS Appsync:默认值不存储在缓存中

时间:2018-09-12 11:19:07

标签: ios react-native apollo apollo-client apollo-link-state

我为此苦了几天。

一个月前,我已经使用AppSync成功配置了Apollo-Link-State,并开始添加默认值和解析器,如下所示:

const cache = new InMemoryCache() //create the cache to be shared by appsync and apollo-link-state

const appSyncAtrributes = {
  //...
  //setup appSync
}

const stateLink = createLinkWithCache(() => withClientState({
    cache,
    resolvers: {
        Mutation: {
            updateCurrentUser: (_, { username, thumbnailUrl }, { cache }) => {
                // ...
                // working mutation that store the login information when user authenticate.
            }
        }
    },
    defaults: {
        currentUser: {
            __typename: 'CurrentUser',
            username: '',
            thumbnailUrl: ''
        }
    }
}))

const appSyncLink = createAppSyncLink({
    url: appSyncAtrributes.graphqlEndpoint,
    region: appSyncAtrributes.region,
    auth: appSyncAtrributes.auth,
    complexObjectsCredentials: () => Auth.currentCredentials()
})

const link = ApolloLink.from([stateLink, appSyncLink])

const client = new AWSAppSyncClient({}, { link })

它工作了这么长时间(我在应用程序周围调用@client变异并进行查询)。

但是现在我试图在“链接状态”中添加其他数据,因为这(其他所有内容保持不变):

 
defaults: {
    currentUser: {
        __typename: 'CurrentUser',
        username: '',
        thumbnailUrl: '',
        foo: 'bar',
    },
    hello: 'world',
    userSettings: {
        __typename: 'userSettings',
        isLeftHanded: true
    }
}

我的缓存没有更新。我的意思是:

currentUser仍然包含__typename: 'CurrentUser', username: '', thumbnailUrl: ',但不包含foo: 'bar'. And the cache doensn't contains您好:'bar'or userSettings`。

更令人困惑的事实是,如果我给usernamethumbnailUrl这样的值,例如username: 'joe',则缓存实际上反映了这一变化! (而忽略了我所有其他修改)

我尝试了该实验的所有变体,并清除了所有缓存(甚至在新同事的计算机上运行它,以确保它们不涉及脏缓存)。

我完全一无所知。

上下文:

  • 它在iOS模拟器中发生
  • 我正在调试中观看appsync的redux缓存
  • apollo-cache-memory:1.2.8
  • 阿波罗客户端:2.3.5
  • 阿波罗链接:1.2.2
  • apollo-link-state:0.4.1
  • aws-appsync:1.3.2

更新:实际上,从默认值开始都不存储currentUser。当突变被调用时,它进入缓存。

1 个答案:

答案 0 :(得分:0)

好吧,我的问题毕竟不是问题(浪费了2天)。

问题是缺少适当的调试工具(不得不观察缓存通过redux演变)。 缓存实际上已正确写入,但未在任何地方显示。

当我开始查询该缓存时,一切正常。

等不及要使用react-native-debugger集成适当的apollo / graphql分析器