我希望能够从缓存中读取一些项目。
我有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
?
为什么阿波罗不知道某些字段的缓存中有数据,而对其他字段却返回false?
编辑:
添加客户端状态:
// 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 || {})
})