Я хочу иметь возможность читать некоторые элементы из кэша.
У меня есть 3 формы, которые задают ряд вопросов. В конце каждой формы я кэширую ответы в кеше Apollo перед отправкой их на сервер.
При первой отправке формы я пишу в кеш примерно так:
client.cache.writeData({
data: {
listing: {
boatType: this.state.boatType,
title: this.state.title,
price: this.state.price,
city: this.state.city,
__typename: "listing"
}
}
})
На следующей странице у меня есть запрос, который читает кэш:
<Query query={QUERY} errorPolicy="ignore">
{({ data }) => (
<Details
listing={data.listing}
/>
)}
</Query>
Мой QUERY
таков:
gql`
{
listing @client {
boatType
title
price
city
description
make
length
maxPeople
lifeJackets
flares
gps
fishFinder
skippered
photos
}
}
`
, который ничего не возвращает, но когда я запрашиваю только те элементы, которые были установлены (как запрос ниже), я получаю возвращенные данные.
gql`
{
listing @client {
boatType
title
price
city
}
}
`
Есть ли способ использовать полный QUERY
даже до того, как я установил данные?
Почему apollo не понимает, что в кеше есть данные для некоторых полей, а просто возвращает false для других полей?
EDIT:
Добавление состояния клиента:
// ApolloClient
return new ApolloClient({
clientState: {
defaults: {
listing: {
__typename: "lising",
boatType: "",
title: "",
price: 0,
city: "",
description: "",
make: "",
length: 0,
maxPeople: 0,
lifeJackets: 0,
flares: false,
gps: false,
fishFinder: false,
skippered: false,
photos: []
}
}
},
connectToDevTools: process.browser,
ssrMode: !process.browser, // Disables forceFetch on the server (so queries are only run once)
link: httpLink,
cache: new InMemoryCache().restore(initialState || {})
})