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
.
UPDATE
@ usmansbk Мы все еще исследуем Apollo Link State, который в настоящее время не полностью поддерживается в SDK из-за того, что кеш можно манипулировать вне стандартного процесса. У нас есть некоторые идеи и некоторый прототип кода, но для полной поддержки потребуется еще некоторое время. Тем временем мы рекомендуем использовать SDK без Apollo Link State.