Javascript 在useEffect钩子中调用API不会';无法在道具更新上正常工作

Javascript 在useEffect钩子中调用API不会';无法在道具更新上正常工作,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我正在寻找关于这个客户的反馈。我想知道: 这看起来像是对自定义React挂钩的正确使用吗 是否有更好的方法根据传入的prop在不同的API端点之间切换?我希望做一些类似的事情: 和 你对你看到的任何东西有什么反馈或建议吗。谢谢大家! 我提供的代码确实有效。但由于挂钩是一个相对较新的,我并不完全相信我使用它们是正确的 以下是我得到的: 从“React”导入React,{useState,useffect}; 函数useFetchMovies(电影类型){ const[movieData,se

我正在寻找关于这个客户的反馈。我想知道:

  • 这看起来像是对自定义React挂钩的正确使用吗
  • 是否有更好的方法根据传入的prop在不同的API端点之间切换?我希望做一些类似的事情:
  • 你对你看到的任何东西有什么反馈或建议吗。谢谢大家! 我提供的代码确实有效。但由于挂钩是一个相对较新的,我并不完全相信我使用它们是正确的

    以下是我得到的:

    
    从“React”导入React,{useState,useffect};
    函数useFetchMovies(电影类型){
    const[movieData,setMovieData]=useState([]);
    const movieEndpointURL=()=>{
    如果(手机类型==“即将推出”){
    返回`https://api.themoviedb.org/3/movie/upcoming?api_key={API_KEY}&language=en-US&page=1®ion=US`;
    }else if(typeOfMovies==“popular”){
    返回`https://api.themoviedb.org/3/movie/popular?api_key={API_KEY}&language=en-US&page=1®ion=US`;
    }
    };
    const fetchMovieData=async()=>{
    试一试{
    const res=wait fetch(movieEndpointURL());
    const movies=wait res.json();
    setMovieData(movies.results);
    console.log(movies.results);
    }捕捉(错误){
    控制台日志(err);
    }
    };
    useffect(()=>{
    fetchMovieData();
    }, []);
    返回[movieData,setMovieData];
    }
    导出{useFetchMovies};
    
    您的
    useFetchMovies
    似乎是正确的,除了
    typeOfMovies
    更改时不会提取新数据的部分,因为当useEffect首次在组件装载时运行时,它将引用最初随其关闭一起创建的
    fetchMoviesData
    ,并且当
    useffetchmovies
    再次调用hook,创建了一个新函数,该函数未被
    useffect
    引用

    为了使其正确成为word,您应该将
    typeOfMovies
    作为第二个参数传递给
    useffect
    like

    useEffect(() => {
        fetchMovieData();
    }, [typeOfMovies]);
    

    typeOfMovies
    改变时,这是否真的
    fetchMovieData
    ?在我看来,当前使用的useEffect将在第一次渲染后获取(如旧的
    componentDidMount
    ),而不是在以后更改道具时获取。@Jokester,你知道吗,你完全正确。它不会更新。嗯,我建议您了解新的hook API(以及它们背后的思想):(包括使用中的[typeOfMovies]),当道具changes@jokester非常感谢你推荐的文章。我刚读完这篇文章!这是一本很长的书,但很有帮助。这很有效!非常感谢您的反馈和好意。这一切都开始变得有意义了。您认为使用IF语句在API端点之间切换可以吗?或者你会更喜欢switch语句或其他语句吗?你实际上不需要if语句,你可以简单地使用动态求值,比如
    `https://api.themoviedb.org/3/movie/${typeOfMovies}?api_key={api_key}&language=en-US&page=1®ion=US`