Я пытаюсь использовать данные состояния клиента 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
. Когда я регистрирую состояние загрузки / данных, я вижу это на сервере:
На клиенте все хорошо: ![client](https://i.stack.imgur.com/6EEeV.png)
Кто-нибудь знает, как это происходит? С установленным кешем я покажуНе вижу загрузки: истинное состояние когда-либо верно? getDataFromTree
из @apollo/react-ssr
работает неправильно?