Apollo Client, повторяющийся вопрос Query? - PullRequest
0 голосов
/ 05 октября 2018

У меня проблема с поиском решения для Stackeroverflow, но без решения.Я сделал компонент, который вызывает запрос на монтирование к бэкэнду, который дает другой ответ на тот же запрос.Я тоже использую SSR и восстанавливаю штат.Состояние, отображаемое сервером, кажется правильным, но компоненты, кажется, восстанавливают только первую запись.

// query
query random {
  randomString{
    id // response is a random ID
    text // response is a random String
  }
}

import React from "react"
import gql from 'graphql-tag';
import { Query } from 'react-apollo';

class RandomContent extends React.Component {
    constructor(props){
        super(props)
    }
  render() {
      return(
          <Query query={gql`
          query Rand${this.props.count} {
              randomString{
                  id
                  text
              }
          }`}
          fetchPolicy={"cache-first"}
          >
            {({ loading, error, data }) => {
                if (loading) return "Loading...";
                if (error) return `Error! ${error.message}`;
                return (
                    <div>
                        <p>id:{data.randomString.id}</p>
                        <p>id:{data.randomString.text}</p>
                    </div>
                )
            }}
          </Query>
      )
  }
} 

export default (RandomContent)

при вызове компонента компонент извлекает строку и идентификатор и, однако, отображает при использованиииспользуя два из этих компонентов, они делают то же самое.Случайная строка и идентификатор одинаковы.Я думаю, что запрос кешируется, хотя результирующий идентификатор отличается.Я использую следующие настройки кэша:

cache: new InMemoryCache(
  {
    dataIdFromObject: object => {
      switch (object.__typename) {
          case 'User': return object.id
          case 'RandomString': return object.id
          default: return defaultDataIdFromObject(object)
      }
  }).restore(window.__APOLLO_STATE__)

. Здесь может возникнуть проблема

RandomString:OU9: {id: "OU9", text: "GaubfA0AkDRtm8oZCIndiiX96CJweaRn8R0MGOzMkB6D6vosgCQK43gAaUFh4fMKqzNdAFsQK33uAQziDnc4sYeNVBXWmRKQ7jS9", __typename: "RandomString"}
RandomString:ucR: {id: "ucR", text: "rEnJYTPil2RwpuPkE2Nb4w6CoVzkjpzcrnDrOcJ3PAniRlzBqEmnnV1hljELVJ9wZSoIW0EqmvBw12CMv5mSu1O0TPF0LevM6UOX", __typename: "RandomString"}

SSR apollo issue

.можно увидеть, что для рендеринга используется только первый идентификатор ответа на запрос: OU9

...