Я борюсь с этим в течение нескольких дней.
Я успешно настроил 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-link: 1.2.2
- apollo-состояние соединения: 0.4.1
- aws-appsync: 1.3.2
Обновление: на самом деле currentUser не сохраняется ни по умолчанию.Он попадает в кеш, когда вызывается мутация.