React-Native + Apollo-Link-State + AWS Appsync: значения по умолчанию не сохраняются в кеше.

Я борюсь с этим несколько дней.

Я успешно настроил Apollo-Link-State с помощью AppSync месяц назад и начал добавлять значения по умолчанию и преобразователи вроде этого:

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 containshello: 'bar'oruserSettings`.

Еще больше сбивает с толку тот факт, что если я даю значение username или thumbnailUrl, например username: 'joe', кеш действительно отражает это изменение! (игнорируя все остальные мои модификации)

Я испробовал все варианты этого эксперимента и очистил все кеши (даже запустил его на новом компьютере-коллеге, чтобы убедиться, что в них нет грязного кеша).

Я совершенно невежественен.

Контекст:

  • Это происходит в симуляторе iOS
  • Я отлаживаю, наблюдая за сокращенным кешем appsync
  • Apollo-cache-inmemory: 1.2.8
  • apollo-client: 2.3.5
  • apollo-ссылка: 1.2.2
  • аполлон-ссылка-состояние: 0.4.1
  • aws-appsync: 1.3.2

Обновление: на самом деле currentUser не сохраняется ни по умолчанию. Попадает в кеш при вызове мутации.


person Edwin Joassart    schedule 12.09.2018    source источник


Ответы (1)


Хорошо, моя проблема не была проблемой (2 дня потрачены впустую).

Проблема заключалась в отсутствии надлежащих инструментов отладки (приходилось наблюдать за развитием кеша через сокращение). Кеш на самом деле написан правильно, но нигде не отображается.

Как только я начал запрашивать этот кеш, все заработало.

Не могу дождаться, пока response-native-debugger интегрирует правильный анализатор apollo / graphql

person Edwin Joassart    schedule 14.09.2018