У меня проблема с поиском решения для 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"}
.можно увидеть, что для рендеринга используется только первый идентификатор ответа на запрос: OU9