仅设置一些项目时如何查询缓存?

时间:2019-06-26 20:42:06

标签: javascript reactjs graphql apollo react-apollo

我希望能够从缓存中读取一些项目。

我有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 || {})
})

0 个答案:

没有答案