我为此苦了几天。
一个月前,我已经使用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`。
更令人困惑的事实是,如果我给username
或thumbnailUrl
这样的值,例如username: 'joe'
,则缓存实际上反映了这一变化! (而忽略了我所有其他修改)
我尝试了该实验的所有变体,并清除了所有缓存(甚至在新同事的计算机上运行它,以确保它们不涉及脏缓存)。
我完全一无所知。
上下文:
更新:实际上,从默认值开始都不存储currentUser。当突变被调用时,它进入缓存。
答案 0 :(得分:0)
好吧,我的问题毕竟不是问题(浪费了2天)。
问题是缺少适当的调试工具(不得不观察缓存通过redux演变)。 缓存实际上已正确写入,但未在任何地方显示。
当我开始查询该缓存时,一切正常。
等不及要使用react-native-debugger集成适当的apollo / graphql分析器