GraphQL Automati c повторное получение пустых ответов - PullRequest
0 голосов
/ 12 января 2020

Я хочу рандомизировать фильмы из API MovieDB. Сначала я отправляю запрос на доступ к идентификатору последней записи:

const { loading: loadingLatest, error: errorLatest, data: latestData, refetch: refetchLatest } = useQuery(
        LATEST_MOVIE_QUERY
    );

Затем я хочу извлечь данные из случайно выбранного идентификатора в диапазоне от 1 до номера последнего идентификатора. Использование переменной, зависящей от первого запроса, похоже, ломает приложение, поэтому сейчас я просто использую один и тот же mov ie каждый раз при монтировании компонента:

const [
        movieState,
        setMovieState
    ] = useState(120);

    const { loading, error, data, refetch } = useQuery(ONE_MOVIE_BY_ID_QUERY, {
        variables : { movieId: movieState },
        skip      : !latestData
    });

Я хочу нажать кнопку чтобы получить новый случайный mov ie, но проблема в том, что многие идентификаторы в API приводят к удаленным записям, а затем я получаю сообщение об ошибке. Я хочу продолжать повторную загрузку, пока не получу хороший ответ, но понятия не имею, как это осуществить. Прямо сейчас моя функция рандомизации выглядит так:

const randomizeClick = () => {
        let mostRecentID = latestData.latestMovie.id;
        setMovieState(Math.floor(Math.random() * mostRecentID));
    };

Буду признателен, если кто-нибудь поможет мне, как это реализовать.

1 Ответ

0 голосов
/ 12 января 2020

Я думаю, что вам нужна функциональность "useLazyQuery" Apollo. Вы можете найти больше информации об этом здесь: https://www.apollographql.com/docs/react/data/queries/#executing -queries-вручную

С помощью useLazyQuery вы можете легко изменять свои переменные, и это должно быть запущено после определенного события (нажмите или что-то похожее). Функциональность useQuery будет загружена при монтировании компонента.

...