Проверка переменной вне ее области действия

#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,
} );