React-Native + Apollo-Link-State + AWS Appsync: значения по умолчанию не хранятся в кэше - PullRequest
0 голосов
/ 12 сентября 2018

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

Я успешно настроил 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 не сохраняется ни по умолчанию.Он попадает в кеш, когда вызывается мутация.

1 Ответ

0 голосов
/ 14 сентября 2018

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

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

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

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

...