Предположим, у вас есть компонент Query
, подобный следующему:
const GET_FOO = gql`
query SomeQuery {
getFoo {
id
bar
}
}
`;
<Query query={GET_FOO}>
{({ loading, error, data }) => (
<SomeComponent/>
)}
</Query>
Когда компонент монтируется, Apollo извлекает данные с сервера или из кэша (в зависимости от того, кэшируются ли эти данные и каков вашполитика извлечения есть).Однако он также подписывается на изменения в кэше.Поэтому, если вы получили Foo
с идентификатором 1
и он обновился в кеше с помощью другой операции, компонент будет уведомлен о них и обновится соответствующим образом.В частности, значение data
, переданное функции поддержки рендеринга, будет изменено, чтобы отразить изменение в кэше.
Компонент Mutation
имеет сигнатуру функции поддержки рендеринга, аналогичную компоненту Query
, включаяdata
свойство.Однако это свойство отражает только данные, возвращаемые при вызове функции mutate
.В то время как результаты мутации хранятся в кэше, data
, предоставляемый через компонент Mutation
, не является результатом подписки на кэш - скорее это просто удобный способ реагировать на результаты mutate
звонок.Единственный раз, когда data
внутри компонента Mutation
потенциально изменится, это если снова вызвать функцию mutate
.
Если мы изменим ваш пример и поместим компоненты в компонент Query
, мыможет показывать данные из запроса внутри вашего компонента и потенциально игнорировать data
от любого из двух Mutation
компонентов.Предполагая, что Query
и Mutations
ссылаются на один и тот же элемент в кэше, данные из компонента Query
будут обновляться каждый раз, когда разрешается одна из мутаций.