Next.js添加'use client'仍报错,如何避免父组件转客户端组件?
解决Next.js中useRouter在客户端组件的报错问题
你的核心问题是"use client"指令的写法错误,导致Next.js无法正确识别该组件为客户端组件,进而引发useRouter的使用报错。
关键修正步骤
- 移除
"use client"后面的空格,确保指令为"use client";(空格会破坏指令的识别逻辑,组件仍会被默认当作服务器组件) - 无需修改父组件,Next.js允许服务器组件直接嵌套客户端组件,只要当前组件正确标记为客户端组件即可
修正后的完整代码:
"use client"; import { useRouter } from 'next/navigation' export const NavBar = () => { const router = useRouter() return ( <div className='fixed inset-x-0 top-0 h-20 bg-gray-900 flex items-center justify-between px-10'> <div></div> <div> <button onClick={() => router.push('/api/auth/signin')} className='bg-blue-500 text-white px-4 py-2 rounded-md'> Login </button> </div> </div> ) }
额外验证点
- 确认你的Next.js版本为13.4及以上(App Router模式下
"use client"指令才正式生效) - 父组件中直接导入该NavBar组件即可,不需要添加额外的客户端标记
内容的提问来源于stack exchange,提问作者vishwas babar
相关产品推荐
相关产品推荐

