我试图从API中获取一些数据,但不管我使用了哪些依赖项,useEffect仍然在进行无限循环,代码中是否有错误,或者为什么它一直这样做?

function HomePage() {
    const [Carousels, setCarousels] = useState([]);
    const [loading, setLoading] = useState(false);

    useEffect(() => {
        const getCarousels = async () => {
            setLoading(true);
            const genres = ["BestRated", "Newest"];
            for (const genre of genres) {
                try {
                    const res = await axios.get(`http://localhost:4000/api/carousels/` + genre);
                    console.log(res.data);
                    setCarousels([...Carousels, res.data]);
                } catch (err) {
                    console.log(err);
                }
            }
            setLoading(false);
        }
        getCarousels();
    }, [Carousels]);
    return (
        <div className='Home'>
            <NavBar />
            <HeroCard />
            {!loading && Carousels.map((carousel) => (
                <Carousel key={carousel._id} carousel={carousel} />
            ))}
            <Footer />
        </div>
    );
}

推荐答案

当 carousel 和珊瑚礁在useEffect内发生变化时调用Use effect.

将设置状态与回调一起使用

function HomePage() {
    const [Carousels, setCarousels] = useState([]);
    const [loading, setLoading] = useState(false);

    useEffect(() => {
        const getCarousels = async () => {
            setLoading(true);
            const genres = ["BestRated", "Newest"];
            for (const genre of genres) {
                try {
                    const res = await axios.get(`http://localhost:4000/api/carousels/` + genre);
                    console.log(res.data);
                    setCarousels(carouselsPrev => [...carouselsPrev, res.data]);
                } catch (err) {
                    console.log(err);
                }
            }
            setLoading(false);
        }
        getCarousels();
    }, []);
    return (
        <div className='Home'>
            <NavBar />
            <HeroCard />
            {!loading && Carousels.map((carousel) => (
                <Carousel key={carousel._id} carousel={carousel} />
            ))}
            <Footer />
        </div>
    );
}

Reactjs相关问答推荐

如何实现黑暗模式 map ?

无法在列表中看到文本

为什么这个'Suspense'子组件在挂起promise解决后会丢失它的状态,而不是呈现?<>

如何创建react router v6的自定义子路由?

如何使我的代码可以接受我想要的每一个链接

在Reaction中导入';图片&文件夹时出错

ReactJS 中的图像加载顺序

无法使axiosmockadapter正常工作

如何在 ChartJS 中操作 Y 轴

null 不是对象(判断RNSound.IsAndroid)

单元测试 useLoaderData() react-router v6 加载器函数

Github 页面无法正确呈现 CSS,因为它是本地的

React Native map 中的初始zoom 级别

导航到屏幕时,react 本机上下文状态变为未定义

在嵌套的 Stack Navigator 中的 BottomTabBar 中导航会导致比以前更多的渲染

react 页面更新

将 dict 值转换并插入到react 钩子的列表中

为什么 React 会多次调用我的应用程序的某些函数?

为什么 state redux-toolkit 是代理?

React-Native PDF 注释