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

调用useAuth函数触发Uncaught TypeError:useAuth不是函数的问题排查

解决Next.js中useAuth()提示“is not a function”的问题

问题描述

在Navigation.tsx中调用AuthContext.tsx内的useAuth()函数时,收到错误:Uncaught TypeError: (0 , _contexts_AuthContext__WEBPACK_IMPORTED_MODULE_4__.useAuth) is not a function。已完成以下调试:

  • AuthProvider已在layout.tsx中包裹Navigation组件
  • useAuth使用命名导出和花括号导入

解决方案

1. 为Navigation.tsx添加客户端组件标识

在Next.js App Router中,组件默认是服务器组件,无法使用React Hooks(包括useContext)。而useAuth内部依赖useContext,因此必须将Navigation标记为客户端组件:

修改Navigation.tsx的开头,添加"use client"指令:

"use client"
import React from 'react';
import Link from 'next/link';
import { navCategories } from '../config/navData';
import { useAuth } from '@/contexts/AuthContext';

export default function Navigation() {
    const {isAuthenticated, login, logout} = useAuth();

    // 组件剩余代码...
}

2. 验证路径别名配置

确认@/contexts/AuthContext的路径别名在tsconfig.json或jsconfig.json中正确配置,避免导入错误文件:

// tsconfig.json
{
  "compilerOptions": {
    "paths": {
      "@/*": ["./*"]
    }
  }
}

3. 清除缓存并重启开发服务器

Next.js的缓存可能导致模块导出异常,执行以下步骤:

  • 删除项目根目录下的.next文件夹
  • 停止当前开发服务器,重新运行npm run dev

4. 检查导出语句是否存在冲突

确认AuthContext.tsx中没有重复导出或默认导出混淆的情况,当前代码的命名导出是正确的,确保没有类似export default useAuth的错误语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:42:26