Как сохранить локальное состояние «по умолчанию» в AppSyncClient, используя встроенный кеш - PullRequest
0 голосов
/ 20 января 2019

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.

...