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

Другие вопросы по тегам