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

React组件中无依赖useEffect执行两次问题求助(React Router v6)

解决React useEffect空依赖却执行两次的问题

核心原因:React 18 Strict Mode

这是React 18开发环境下的默认行为——Strict Mode会刻意让组件挂载→卸载→重新挂载,以此检测未正确清理的副作用。你的useEffect空依赖本应只执行一次,但在Strict Mode的开发环境中会触发两次,生产环境下这个现象会自动消失。

解决方案

1. 开发环境临时规避(不推荐长期使用)

如果只是不想在开发时看到两次执行,可以找到项目根组件(通常是index.js),去掉<StrictMode>的包裹:

// 原代码
ReactDOM.createRoot(document.getElementById('root')).render(
  <StrictMode>
    <App />
  </StrictMode>
);

// 修改后
ReactDOM.createRoot(document.getElementById('root')).render(
  <App />
);

⚠️ 注意:Strict Mode能帮你提前发现内存泄漏、重复订阅等潜在问题,建议开发时保留,生产环境无需手动移除,React会自动禁用该模式。

2. 确保组件未被重复渲染

检查你的路由配置或其他组件,确认<Profiles />是否被多次渲染。React Router v6中exact属性已默认生效,你的路由配置没问题,但要避免在其他地方(如Navbar、其他路由组件)重复引入<Profiles />。

3. 修复useEffect内部逻辑(额外提示)

你的代码中定义了fetchProfiles异步函数,但没有调用它,所以即使useEffect触发,也不会执行内部的请求逻辑。需要在useEffect里调用这个函数:

useEffect(() => {
  const fetchProfiles = async () => {
    console.log("profiles");
    // 你的异步请求逻辑
  };
  // 调用函数
  fetchProfiles();
}, []);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:45:50