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

如何确保第二个axios请求执行时userid不为null?

解决React中userid未初始化就发起请求的问题

核心问题确实是获取用户ID的异步请求与获取用户物品的请求并行执行,userid还未被更新为有效值就被代入了请求URL,导致无效请求。以下是几种直接可行的解决方式:


方案1:在请求前校验userid有效性

修改fetchUserItem,先判断userid是否存在,不存在则终止请求:

const fetchUserItem = async () => {
  // 先校验userid是否已获取
  if (!userid) {
    console.log('用户ID未就绪,无法发起请求');
    return;
  }

  try {
    const owner = await axios({
      url: `${baseUrl}/additem/owner/${userid}`,
      method: 'get'
    });
    const { events } = owner.data;
    console.log(owner.data);
    setitemList(events);
  } catch (err) {
    console.log('请求出错:', err);
  }
};

方案2:依赖userid自动触发请求

如果需要页面加载时自动获取用户物品,可将fetchUserItem放入监听userid变化的useEffect中,确保userid更新后再发起请求:

const [userid, setUserid] = useState(null);
const [itemList, setitemList] = useState([]);

// 获取用户ID的逻辑保留
useEffect(() => {
  (async () => {
    try {
      const resp = await httpClient.get("//localhost:5000/@me");
      setUserid(resp.data.id);
      console.log(resp.data.id);
    } catch (error) {
      console.log("Not authenticated");
    }
  })();
}, []);

// 监听userid变化,就绪后自动请求用户物品
useEffect(() => {
  const fetchUserItem = async () => {
    if (!userid) return;
    try {
      const owner = await axios({
        url: `${baseUrl}/additem/owner/${userid}`,
        method: 'get'
      });
      const { events } = owner.data;
      console.log(owner.data);
      setitemList(events);
    } catch (err) {
      console.log('请求出错:', err);
    }
  };

  fetchUserItem();
}, [userid]); // 依赖userid,值变化时执行

方案3:UI层面限制触发操作

如果fetchUserItem是由用户操作(比如按钮点击)触发,可在UI上禁用操作直到userid就绪:

<button onClick={fetchUserItem} disabled={!userid}>
  获取我的物品
</button>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:33:20