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

NextJS中Hamburger菜单组件点击无响应问题求助

问题排查与修复方案

1. 先确认点击事件是否触发

打开浏览器开发者工具的Console面板,点击移动端汉堡按钮,查看是否输出clicked:

  • 无输出:说明按钮的点击事件未被触发,大概率是样式问题导致点击区域异常或按钮被遮挡:

    • 给按钮添加cursor-pointer类,确保鼠标悬停时显示可点击指针:
      <button className='inline-flex p-3 hover:bg-blue-500 rounded lg:hidden text-white ml-auto hover:text-white outline-none cursor-pointer' onClick={handleClick}>
      
    • 若仍无反应,添加z-50类提升按钮层级,避免被其他元素覆盖:
      <button className='inline-flex p-3 hover:bg-blue-500 rounded lg:hidden text-white ml-auto hover:text-white outline-none cursor-pointer z-50' onClick={handleClick}>
      
  • 有输出:说明状态已更新,但UI未同步,问题出在显示逻辑的className上:

    • 原代码中navbar ? '' : 'hidden'的逻辑没问题,但在移动端(lg断点以下),明确添加block类更稳妥,避免Tailwind样式优先级冲突:
      <div className={`${navbar ? 'block' : 'hidden'} w-full lg:inline-flex lg:flex-grow lg:w-auto`}>
      

2. 优化状态更新逻辑

使用React的函数式更新避免闭包导致的旧状态问题,确保状态切换准确:

const handleClick = () => {
  setNavbar(prev => !prev);
  console.log("clicked");
};

修改后的完整代码

import Link from 'next/link';
import { useState } from 'react';

export const Navbar = () => {
  const [navbar, setNavbar] = useState(false);
  
  const handleClick = () => {
    setNavbar(prev => !prev);
    console.log("clicked");
  };

  return (
    <>
      <nav className='flex items-center flex-wrap bg-blue-400 p-3'>
        <Link href='/'>
          <a className='inline-flex items-center p-2 mr-4'>
            <svg
              viewBox='0 0 24 24'
              xmlns='http://www.w3.org/2000/svg'
              className='fill-current text-white h-8 w-8 mr-2'
            >
              <path d='M12.001 4.8c-3.2 0-5.2 1.6-6 4.8 1.2-1.6 2.6-2.2 4.2-1.8.913.228 1.565.89 2.288 1.624C13.666 10.618 15.027 12 18.001 12c3.2 0 5.2-1.6 6-4.8-1.2 1.6-2.6 2.2-4.2 1.8-.913-.228-1.565-.89-2.288-1.624C16.337 6.182 14.976 4.8 12.001 4.8zm-6 7.2c-3.2 0-5.2 1.6-6 4.8 1.2-1.6 2.6-2.2 4.2-1.8.913.228 1.565.89 2.288 1.624 1.177 1.194 2.538 2.576 5.512 2.576 3.2 0 5.2-1.6 6-4.8-1.2 1.6-2.6 2.2-4.2 1.8-.913-.228-1.565-.89-2.288-1.624C10.337 13.382 8.976 12 6.001 12z' />
            </svg>
            <span className='text-xl text-white font-bold uppercase tracking-wide'>
              Portfolio
            </span>
          </a>
        </Link>
        <button className='inline-flex p-3 hover:bg-blue-500 rounded lg:hidden text-white ml-auto hover:text-white outline-none cursor-pointer z-50' onClick={handleClick}>
          <svg
            className='w-6 h-6'
            fill='none'
            stroke='currentColor'
            viewBox='0 0 24 24'
            xmlns='http://www.w3.org/2000/svg'
          >
            <path
              strokeLinecap='round'
              strokeLinejoin='round'
              strokeWidth={2}
              d='M4 6h16M4 12h16M4 18h16'
            />
          </svg>
        </button>
        <div className={`${navbar ? 'block' : 'hidden'} w-full lg:inline-flex lg:flex-grow lg:w-auto`}>
          <div className='lg:inline-flex lg:flex-row lg:ml-auto lg:w-auto w-full lg:items-center items-start flex flex-col lg:h-auto'>
            <Link href='/'>
              <a className='lg:inline-flex lg:w-auto w-full px-3 py-2 rounded text-white font-bold items-center justify-center hover:bg-blue-500 hover:text-white'>
                Home
              </a>
            </Link>
            <Link href='/'>
              <a className='lg:inline-flex lg:w-auto w-full px-3 py-2 rounded text-white font-bold items-center justify-center hover:bg-blue-500 hover:text-white'>
                Experience
              </a>
            </Link>
            <Link href='/about'>
              <a className='lg:inline-flex lg:w-auto w-full px-3 py-2 rounded text-white font-bold items-center justify-center hover:bg-blue-500 hover:text-white'>
                About
              </a>
            </Link>
            <Link href='/'>
              <a className='lg:inline-flex lg:w-auto w-full px-3 py-2 rounded text-white font-bold items-center justify-center hover:bg-blue-500 hover:text-white'>
                Projects
              </a>
            </Link>
            <Link href='/'>
              <a className='lg:inline-flex lg:w-auto w-full px-3 py-2 rounded text-white font-bold items-center justify-center hover:bg-blue-500 hover:text-white'>
                Contact
              </a>
            </Link>
          </div>
        </div>
      </nav>
    </>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:35:30