Reactjs 空响应上的GraphQL自动重新蚀刻

Reactjs 空响应上的GraphQL自动重新蚀刻,reactjs,graphql,apollo,Reactjs,Graphql,Apollo,我想随机播放MovieDB API中的电影。首先,我发送请求以访问最新条目的ID: const { loading: loadingLatest, error: errorLatest, data: latestData, refetch: refetchLatest } = useQuery( LATEST_MOVIE_QUERY ); 然后,我想从随机选择的ID(介于1和最新ID的编号之间)中获取数据。根据第一次查询使用变量似乎会破坏应用程序,因此现在我每次安装组件

我想随机播放MovieDB API中的电影。首先,我发送请求以访问最新条目的ID:

const { loading: loadingLatest, error: errorLatest, data: latestData, refetch: refetchLatest } = useQuery(
        LATEST_MOVIE_QUERY
    );
然后,我想从随机选择的ID(介于1和最新ID的编号之间)中获取数据。根据第一次查询使用变量似乎会破坏应用程序,因此现在我每次安装组件时都使用相同的电影:

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

    const { loading, error, data, refetch } = useQuery(ONE_MOVIE_BY_ID_QUERY, {
        variables : { movieId: movieState },
        skip      : !latestData
    });
我想按下一个按钮来获取一个新的随机电影,但问题是API中的许多ID导致删除条目,然后我得到一个错误。我想继续重新蚀刻,直到我得到一个好的回复,但我不知道如何实现它。现在我的随机化函数如下所示:

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

如果有人能帮我实现这一点,我将不胜感激。

我想您需要的是阿波罗的“useLazyQuery”功能。您可以在此处找到有关它的更多信息:


使用useLazyQuery,您可以轻松更改变量,这意味着在某个事件(单击或类似事件)后触发。当安装组件时,将加载useQuery功能。

假设您正在查询您也构建的服务器,最好在后端完成此类操作。也就是说,您应该一直在服务器上重试对TMDb的调用,直到收到一个点击。由于服务器和客户端之间增加了延迟,在客户端重试的速度会慢得多。也就是说,最好的方法是编写一个脚本来查询它们的API并捕获所有有效ID。然后,您可以将其转储到文件或数据库中,并从该组ID中随机选取一个ID。创建一个脚本来执行此操作意味着您可以定期重新运行它,以确保您的ID列表是最新的。