У меня есть страница, где вы можете увидеть текущий пункт и нажать «Далее», чтобы увидеть следующий. Вот как выглядит этот компонент:
<code>class App extends Component {
constructor(props) {
super(props);
this.state = {
index: 0,
ids: ["VXNlcjox", "VXNlcjoy"]
};
this.onNext = () => this.setState(s => ({ index: (s.index + 1) % 2 }));
}
render() {
const { index, ids } = this.state;
return (
<div>
<button type="button" onClick={this.onNext}>
next
</button>
<QueryRenderer
environment={environment}
query={graphql`
query App_Query($id: ID!) {
node(id: $id) {
id
}
}
`}
variables={{ id: ids[index] }}
render={({ error, props }) => {
if (error) {
return <div>Error!</div>;
}
if (!props) {
return <div>Loading...</div>;
}
return <pre>{JSON.stringify(props, null, 2)}
;
}}
/>
);
}
}
Что я ожидаю , так это то, что каждый элемент будет извлечен только при первом запросе и последующем использовании из кэша.
Но то, что я вижу , заключается в том, что новый запрос делается на вкладке сети каждый раз, когда я нажимаю «Далее», даже если этот Элемент запрашивался ранее. Если я открою Relay DevTools - товары с этим идентификатором уже в магазине:
Так почему каждый раз делается новый запрос? Разве Relay Modern не должен повторно использовать ранее кэшированные данные?