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 contains
привет: 'бар' or
userSettings`.
Более запутанным является тот факт, что если я придаю значение username
или же thumbnailUrl
лайк username: 'joe'
, кеш на самом деле отражает это изменение! (игнорируя все мои другие модификации)
Я испробовал все варианты этого эксперимента и очистил все кэши (даже запустив его на новом коллегном компьютере, чтобы убедиться, что они не были связаны с грязным кэшем).
Я совершенно невежественен.
Контекст:
- Это происходит в симуляторе iOS
- Я отлаживаю, наблюдая за избыточным кешем appsync
- apollo-cache-inmemory: 1.2.8
- Аполлон-клиент: 2.3.5
- apollo-link: 1.2.2
- apollo-link-state: 0.4.1
- aws-appsync: 1.3.2
Обновление: на самом деле currentUser не сохраняется ни по умолчанию. Он попадает в кеш, когда вызывается мутация.
1 ответ
Хорошо, моя проблема не была проблемой в конце концов (2 дня потрачены впустую).
Проблема заключалась в отсутствии надлежащих средств отладки (нужно было следить за развитием кеша через редукс). Кеш на самом деле написан правильно, но нигде не отображается.
Как только я начал запрашивать этот кеш, все заработало.
Не могу дождаться, пока реагирующий-нативный-отладчик интегрирует правильный анализатор apollo/graphql