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

React Router v6.0.2在useEffect中调用navigate导致页面无响应如何解决

问题原因与修复方案

核心问题

你代码里的useEffect没有声明依赖数组,导致每次组件重渲染都会重新执行:

  • 只要用户处于登录状态,useEffect每次运行都会调用setAuthenticated(true)和navigate('home')
  • setAuthenticated会触发组件重渲染,重渲染后又会再次执行useEffect,形成无限死循环,最终导致页面无响应

其他需要修正的问题

  • onAuthStateChanged会返回一个取消监听的清理函数,你需要在useEffect的返回值中调用它,避免组件卸载后出现内存泄漏
  • navigate传入的相对路径会基于当前路由地址拼接,建议改为绝对路径/home,避免跳转到错误的路由地址
  • 按钮点击的navigate('home')同样建议改为绝对路径,避免潜在的路由跳转错误

修复后的代码片段

仅需要修改App组件内的useEffect部分即可:

useEffect(() => {
  // 接收取消监听的函数
  const unSubscribeAuth = onAuthStateChanged(auth, (user) => {
    if (user) {
      setAuthenticated(true);
      // 改为绝对路径避免跳转错误
      navigate('/home')
    } else {
      setAuthenticated(false);
    }
  })
  // 返回清理函数,组件卸载时自动取消监听
  return unSubscribeAuth
// 添加依赖数组,useEffect只会在组件首次挂载、navigate变动时运行(navigate本身是稳定值,实际只会执行一次)
}, [navigate])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:06:02