#javascript #android #typescript #react-native #apollo
Вопрос:
В своем коде я хочу выполнить запрос условно, а затем проверить его переменную загрузки внутри шаблона, но только в том случае, если запрос выполнен и я не хочу, чтобы в моем файле были какие-либо ошибки машинописи. Как мне проверить эту переменную, которая может существовать или не существовать в ее контексте?
Я использую Apollo GraphQL.
if( executeMyQuery )
{
const {
data, loading: loadingQuery
} = useQuery( MyQuery );
}
return (
<View>
{ /* ... some code ... */ }
{ executeMyQuery amp;amp; loadingQuery ?
<Text>Query is loading...</Text>
{ /* ... some code ... */ }
: null }
</View>
);
В машинописном тексте говорится: Cannot find name 'loadingQuery'.
Комментарии:
1. Вам не разрешается вызывать
useQuery
hook внутри условного оператора. Смотрите документы reactjs.org/docs/hooks-rules.html
Ответ №1:
Взгляните на зависимые запросы
const {
data, loading: loadingQuery
} = useQuery( MyQuery, {
// The query will not execute until the userId exists
enabled: executeMyQuery,
}
);
return (
<View>
{ /* ... some code ... */ }
{ executeMyQuery amp;amp; loadingQuery ?
<Text>Query is loading...</Text>
{ /* ... some code ... */ }
: null }
</View>
);
Комментарии:
1. Спасибо вам за ваш ответ! Однако, похоже, что параметр «включено» не распознается в моем коде
2. «включено» не существует в типе «QueryHookOptions»
3. Я использую Apollo GraphQL вместо запроса React
4. Извините, в этом случае вам следует использовать useLazyQuery.
5. Вместо
enabled
этого мне нужно было использоватьskip
🙂
Ответ №2:
Исправлено с помощью skip
параметра, изменив
if( executeMyQuery )
{
const {
data, loading: loadingQuery
} = useQuery( MyQuery );
}
Для
const {
data, loading: loadingQuery
} = useQuery( MyQuery, {
skip: executeMyQuery,
} );