Я работаю над приложением для реагирования. Я хочу использовать этот запрос:
const Newss = gql`
query getNewssData {
newss(ordered: true) {
id
title
content
event{
id
title
}
}
}
`;
выполняется этим кодом реакции:
<Query query = {Newss}>
{({ loading, error, data }) => {
if (loading) return LoadingNews();
if (error) return `Error! ${error.message}`;
return data.newss.map(news => newssToRender(news));
}}
</Query>
Но он возвращает ошибку! потому что есть новости без событий. Как разрешить делать этот запрос иногда, даже если событие может быть нулевым?
Спасибо большое за помощь !
Изая
Примечание :
function newssToRender(news) {
if (news.event === null) {
return newssToRenderWithoutEvent(news);
}
return (
<div>
<News
title = {news.title}
content = {news.content}
eventid = {news.event.id}
eventTitle = {news.event.title}
pictureSrc = {news.picture}
/>
</div>
);
}





Ошибка указывает, что поле имеет тип, отличный от Null, который является специальным типом в GraphQL, который является оболочкой для другого типа. Ненулевые поля не могут возвращать значение NULL и в этом случае вызовут ошибку. Это ничем не отличается от поля, объявляющего Int, а затем возвращающего String - был предоставлен неправильный тип (и его нельзя было принудить), поэтому возникает ошибка.
Схема - это контракт для взаимодействия сервер-клиент. Если поле имеет определенный тип, сервер фактически гарантии, что поле всегда будет этого типа. Это ограничивает работу с клиентом, поскольку устраняет необходимость проверки типа ответа на стороне клиента.
К сожалению, вы мало что можете сделать, потому что такие ошибки представляют собой проблему с самим серверным кодом. Если имеет смысл, чтобы событие иногда было нулевым, тогда поле следует сделать допускающим значение NULL. В противном случае любой базовый код должен быть исправлен, чтобы поле никогда не возвращало null. Правильный курс действий - сообщить об ошибке автору API (или исправить код самостоятельно, если это вы!).
Это действительно была проблема со шлюзом:
event: (root, args, context) => context.loaders.event.load(root.event)
заменяется :
event: (root, args, context) => root.event ? context.loaders.event.load(root.event) : null,
разрешить нулевое значение
Спасибо даниэль
Спасибо за ваш ответ. Теперь мне действительно все ясно. Я думал, что возникла проблема с schema.gql, но на самом деле она исходит от загрузчика шлюза.