You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS 使用useState时出现接口无限请求循环问题求助

问题原因分析
  • 你的写法不符合React函数组件的执行逻辑:函数组件在每次状态更新时都会重新执行整个函数体,你直接在组件顶层调用populateUser方法,该方法内部调用的setUserState、setLoading都会触发组件状态更新,进而触发组件重渲染,重渲染又会再次执行populateUser,最终形成死循环。
  • 你的需求是组件加载完成后只请求一次用户信息,属于「组件挂载时执行的副作用」,需要用React的useEffect钩子来封装异步请求逻辑。
修正后的代码
import { useState, useEffect } from 'react';

const AppLayout = () => {
    const [loading, setLoading] = useState(true);
    const [userState, setUserState] = useState(null);

    const populateUser = async () => {
        try {
            let profile_data = await UserService.findUser();
            const user = {"name": profile_data["name"]};
            setUserState(user);
        } catch (err) {
            // 可自行补充请求失败的处理逻辑,比如提示用户登录异常
            console.error('获取用户信息失败', err);
        } finally {
            setLoading(false);
        }
    }

    // 第二个参数传空数组,代表这个副作用仅在组件首次挂载完成后执行一次
    useEffect(() => {
        populateUser();
    }, []);

    return(
        <>
        {
            !loading && userState && <h1>{userState.name}</h1>
        }
        </>
    )
}
补充说明
  • 新增了可选的请求异常捕获逻辑,避免接口报错时页面直接崩溃
  • 渲染逻辑新增了userState非空判断,避免请求失败时访问null的name属性出现运行时报错

内容的提问来源于stack exchange,提问作者Manuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:45:02