Можно ли обновить реквизиты компонента, вызвав refetch
из одноуровневого компонента?
Рассмотрим компоненты со следующей структурой:
<Home> # wrapped in a QueryRenderer
<List /> # wrapped in a Fragment Container
<Map /> # wrapped in a Refetch Container
</Home>
List
и Map
используют одну и ту же конечную точку запроса: allItems
.
Когда Map
вызывает refetch
, он обновляет свои данные, однако данные List
не обновляются.
Запрос на повторное получение идентичен запросу Home
QueryRenderer
. Похоже, что Relay не отображает результат повторного поиска в те части магазина, в которых хранятся данные для List
, поскольку реквизиты List
не изменяются.
Возможно ли для повторной проверки обновить реквизиты вне компонента, который содержит контейнер Refetch? Если нет, то как изменения в одном компоненте могут инициировать повторное обновление и обновить реквизиты одноуровневого компонента, не переводя контейнер повторного поиска на более высокий уровень - если только это не единственный способ?
Для большего контекста я включил некоторый код, чтобы проиллюстрировать структуру и запросы более четко.
Используя Relay, предположим, что у нас есть родительский компонент, обернутый в QueryRenderer
для выполнения начальной выборки данных.
<QueryRenderer
environment={environment}
query={graphql`
query HomeQuery {
...List_query
...Map_query
}
`}
render={({ error, props }) => {
if (error) {
console.log(error)
return <div>Error!</div>
}
if (!props) {
return <div>Loading...</div>
}
return (
<div>
<List query={props} />
<Map query={props} />
</div>
)
}}
/>
Оба List
и Map
содержат фрагменты. List
завернут в контейнер с фрагментами:
createFragmentContainer(List, {
query: graphql`
fragment List_query on Query {
allItems(first: 10) @connection(key: "Map_allItems") {
edges {
node {
id
name
}
}
}
}
`
})
Принимая во внимание, что Map
завернут в контейнер Refetch:
createRefetchContainer(
Map,
{
query: graphql`
fragment Map_query on Query {
allItems(first: 10) @connection( key: "Map_allItems") {
edges {
node {
id
name
created
}
}
}
}
`
},
graphql`
query MapRefetchQuery {
...Map_query
...List_query
}
`
)
Код был уменьшен, поэтому возможно, что в нем есть опечатка! Дайте мне знать, если это так, и я обновлю его.