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

React项目useAuth解构currentUser触发TypeError错误求助

问题解决:Uncaught TypeError: Cannot destructure property 'currentUser' of 'useAuth(...)' as it is undefined

错误原因分析

  • 组件未被AuthContext作用域覆盖:Navbar调用useAuth()时返回undefined,说明该组件不在AuthProvider的包裹范围内,无法获取认证上下文。
  • 初始状态类型不匹配:AuthProvider中currentUser初始值设为false,但Firebase的onAuthStateChanged在用户未登录时返回null,类型不一致可能引发后续逻辑异常。

修复步骤

1. 确保根组件正确包裹AuthProvider

在项目根组件(如App.js)中,将AuthProvider作为最外层容器,包裹所有需要使用认证上下文的组件(包括Navbar):

// App.js 示例代码
import React from 'react';
import AuthProvider from './contexts/AuthProvider';
import Navbar from './components/Navbar';
import { BrowserRouter } from 'react-router-dom';

function App() {
  return (
    <AuthProvider>
      <BrowserRouter>
        <Navbar />
        {/* 其他路由、组件 */}
      </BrowserRouter>
    </AuthProvider>
  );
}

export default App;

2. 修正AuthProvider中currentUser的初始值

将currentUser的初始状态改为null,与Firebase返回的未登录状态保持一致:

// AuthProvider.js 修改部分
function AuthProvider({children}) {
    // 将初始值从false改为null
    const [currentUser, setCurrentUser] = useState(null)
    const [loading, setLoading] = useState(true)
    
    // 其余代码保持不变
}

3. 验证useAuth的导入路径

确认Navbar中import { useAuth } from '../contexts/AuthContext';的路径正确,与AuthProvider文件的实际存放位置匹配。

额外优化建议

在saveCartAndFavsToDatabase函数中增加用户登录状态判断,避免未登录时调用user.uid报错:

const saveCartAndFavsToDatabase = () => {
    return new Promise((resolve, reject) => {
      if (!currentUser) {
        reject(new Error("当前无登录用户"));
        return;
      }
      const user = currentUser;
      const cartFromLocalStorage = JSON.parse(localStorage.getItem('productsInCart') || "[]");
      const favsFromLocalStorage = JSON.parse(localStorage.getItem('productsInFavs') || "[]");
      const data = {
        cart: cartFromLocalStorage,
        favs: favsFromLocalStorage
      }
      const usersRef = firestore.collection("users");
      usersRef.doc(user.uid).set(data, { merge: true })
        .then(() => resolve())
        .catch((error) => reject(error));
    });
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:04:56