Как запросить кэш, когда установлены только некоторые элементы? - PullRequest
0 голосов
/ 26 июня 2019

Я хочу иметь возможность читать некоторые элементы из кэша.

У меня есть 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 || {})
})
...