Назначение @relay(pattern:true)
Новое выражение @relay(pattern: true)
был введен в журнал изменений для relay.js
0.5
,
Но не могу понять из описания, ни тестов, что именно он делает, и когда я должен использовать это при написании fatQueries
,
Некоторый пример был бы очень полезен.
1 ответ
Рассмотрим запрос GraphQL следующим образом:
viewer {
friends(first: 10) {
totalCount
edges { node { name } }
pageInfo { hasNextPage }
}
}
При определении сложного запроса для мутации Relay включение имени поля без указания какого-либо из его подполей говорит Relay, что любое подполе этого поля может измениться в результате этой мутации.
К сожалению, чтобы пропустить аргументы подключения, такие как find
, first
, а также last
на friends
поле вызовет ошибку проверки в зависимых от аргумента поля edges
а также pageInfo
:
getFatQuery() {
return Relay.QL`
fragment on AddFriendMutationPayload {
viewer {
friends { edges, pageInfo } # Will throw the validation error below
}
}
`;
}
// Uncaught Error: GraphQL validation/transform error ``You supplied the `pageInfo`
// field on a connection named `friends`, but you did not supply an argument necessary
// to do so. Use either the `find`, `first`, or `last` argument.`` in file
// `/path/to/MyMutation.js`.
Вы можете использовать @relay(pattern: true)
директива, указывающая, что нужно использовать толстый запрос для сопоставления с шаблоном по отслеживаемому запросу, а не использовать его как полноценный запрос.
getFatQuery() {
return Relay.QL`
fragment on AddFriendMutationPayload @relay(pattern: true) {
viewer {
friends { edges, pageInfo } # Valid!
}
}
`;
}
Для получения дополнительной информации о мутациях см.: https://facebook.github.io/relay/docs/guides-mutations.html