Предустановленный кеш состояния клиента Apolllo не работает на сервере - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь использовать данные состояния клиента Apollo с хуками useQuery и useMutation в качестве глобального хранилища внутри приложения NextJS. Когда я следую примеру NextJS под названием with-apollo (https://github.com/zeit/next.js/tree/canary/examples/with-apollo),, который использует HOC, в котором он выполняет все запросы и сначала отображает приложение на сервере.

Обычно вы хотите перехватитьсостояние «загрузки» в компоненте, подобном следующему:

const { loading, data } = useQuery(GET_NAME_QUERY) // some @client query
if (loading) return <p>Loading...</p>
return <h1>Hello {data.name</h1>

Но я хочу пропустить проверку загрузки и всегда иметь доступное состояние по умолчанию. Я думаю, что это можно сделать с помощью установки кэша Apollo. -клиент к набору значений по умолчанию, например:

const cache = new InMemoryCache().restore(initialState);

// This is the part where the initial client-state data is set:
cache.writeData({
  data: { name: 'Harry' } 
});

const apolloClient =  new ApolloClient({
  cache,  // <-- cache with preset client-state data
  typeDefs,
  resolvers,
})

С целью просто сделать это:

const { data } = useQuery(GET_NAME_QUERY) // some @client query, resolves immediately from cache
return <h1>Hello {data.name</h1>

Я создал репо с роботом, его именем и статусомкоторые кэшируются с самого начала таким образом. См. https://github.com/rnacken/next-with-apollo-client-state-cache

Клиент работает, без каких-либо ошибок, но во время SSR я получаю сообщение об ошибке, так как у него еще нет данных (и «загрузка»true) после вызова useQuery. Когда я регистрирую состояние загрузки / данных, я вижу это на сервере: SSR error На клиенте все хорошо: client

Кто-нибудь знает, как это происходит? С установленным кешем я покажуНе вижу загрузки: истинное состояние когда-либо верно? getDataFromTree из @apollo/react-ssr работает неправильно?

...