Я борюсь с этим несколько дней.
Я успешно настроил 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 contains
hello: 'bar'or
userSettings`.
Еще больше сбивает с толку тот факт, что если я даю значение 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 не сохраняется ни по умолчанию. Попадает в кеш при вызове мутации.