react-native - 如何使用内置缓存在 AppSyncClient 中保留“默认”本地状态
问题描述
AWSAppSyncClient
不坚持localstate
。先前更新的本地状态丢失。defaults
本地状态会在应用重新启动时重置。即me
使用客户端突变登录后成功更新状态。重新启动应用程序后,me
状态将设置回默认值Offline user
。
网络Query
和Mutation
工作如预期。
我apollo-persist-cache
在将它传递给之前尝试过使用它,withClientState
但它破坏了离线功能并引入了不一致的数据。使用自定义InMemoryCache
也会破坏离线功能。
import { defaults, resolvers } from '../graphql/localstate';
// Before login
// {
// me: {
// __typename: 'User',
// id: '1',
// name: 'Offline user',
// email: 'help@problems.com',
// pictureUrl: null
// },
// }
// After login
// {
// me: {
// __typename: 'User',
// id: 'aws-cognito-idenitity-id',
// name: 'Gnu user',
// email: 'my@example.com',
// pictureUrl: "https://s3.amazon..."
// },
// }
const stateLink = createLinkWithCache(cache => withClientState({
cache,
resolvers,
defaults
}));
const appSyncLink = createAppSyncLink({
url: aws_config.aws_appsync_graphqlEndpoint,
region: aws_config.aws_appsync_region,
auth: {
type: aws_config.aws_appsync_authenticationType,
credentials: () => Auth.currentCredentials()
}
});
const link = ApolloLink.from([stateLink, appSyncLink]);
const client = new AWSAppSyncClient({}, { link });
client.onResetStore(stateLink.writeDefaults);
export default client;
// Inside App.js
<ApolloProvider client={client}>
<Rehydrated>
<AppContainer/>
</Rehydrated>
</ApolloProvider>
我希望AWSAppSync
离线功能能够处理持久化,并使用组件localstate
恢复它。aws-appsync-react
Rehydrated
更新
@usmansbk 我们仍在研究 Apollo 链接状态,由于如何在标准进程之外操作缓存,SDK 目前不完全支持该状态。我们在这里有一些想法和一些原型代码,但仍需要一些时间才能完全支持。同时我们建议使用没有 Apollo Link State 的 SDK。