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

同时更新两个状态导致组件无限循环——ReactJs结合Django后端场景

解决React useEffect导致的循环请求问题

嘿,我来帮你搞定这个循环请求的麻烦!

问题根源

你当前的useEffect没有设置依赖数组,这意味着它会在组件的每一次渲染完成后都自动执行。而你在useEffect里调用了setUsername和setUserImage,这两个状态更新会触发组件重新渲染——重新渲染后又会再次执行useEffect、再次发起请求,如此无限循环,自然会导致后端收到大量重复请求,应用也跟着卡顿了。

解决方案

给useEffect添加合适的依赖数组就能解决这个问题。你的请求URL是基于props.loggedUser生成的,所以只有当loggedUser发生变化时,我们才需要重新发起请求获取用户信息。修改后的代码如下:

// 给初始状态设置默认值,避免渲染时出现undefined的异常
const [username, setUsername] = useState('');
const [userImage, setUserImage] = useState('');

useEffect(() => {
  // 把URL定义在useEffect内部,确保每次依赖变化时使用最新的loggedUser生成地址
  const url = `http://localhost:8000/users/${props.loggedUser}`;
  
  axios.get(url)
    .then((response) => {
      setUsername(response.data.username);
      setUserImage(response.data.profile_pic);
    })
    .catch(error => {
      // 添加错误处理,方便排查网络或后端接口问题
      console.error('获取用户信息失败:', error);
    });
}, [props.loggedUser]); // 依赖数组:只有当loggedUser变化时,才执行这个effect

额外小提示

  • 如果把url定义在useEffect外部,也可以把url加入依赖数组,效果和依赖props.loggedUser是一致的。
  • 给状态设置初始空字符串,能避免组件首次渲染时因为状态为undefined出现的UI异常。
  • 加上catch块处理请求错误,可以帮你快速定位可能出现的网络问题或后端接口错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:32:38