首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >侧风+无头UI:单击或单击后关闭移动菜单

侧风+无头UI:单击或单击后关闭移动菜单
EN

Stack Overflow用户
提问于 2021-09-30 04:28:24
回答 2查看 4.5K关注 0票数 2

我正在使用Tailwind + Headless UI在手机上创建一个汉堡包菜单栏来显示单击菜单。但是,当我单击菜单时,它不会自动关闭并创建一个糟糕的UX。

代码语言:javascript
复制
<Disclosure
        as="nav"
        className="fixed top-0 left-0 right-0 z-10 w-full bg-white shadow"
    >
        {({ open }) => (
            <>
                <div className="px-2 mx-auto max-w-7xl sm:px-4 lg:px-8">
                    <div className="flex justify-between h-16">
                        <div className="flex px-2 lg:px-0">
                            <div className="flex items-center flex-shrink-0">
                                <Link href="/">
                                    <a className="relative block w-12 h-12">
                                        <Image
                                            src="/img/logo.png"
                                            alt="NFT Volt Logo"
                                            layout="fill"
                                            className="w-auto h-6 lg:block"
                                        />
                                    </a>
                                </Link>
                            </div>
                            <div className="hidden lg:ml-6 lg:flex lg:space-x-1">
                                {navLinks.map((link) => (
                                    <NavLink key={link.id} href={link.href}>
                                        {link.name}
                                    </NavLink>
                                ))}
                            </div>
                        </div>

                        <div className="flex items-center justify-center flex-1 px-2 lg:ml-6 lg:justify-end">
                            <div className="w-full max-w-lg lg:max-w-xs">
                                <label htmlFor="search" className="sr-only">
                                    Search
                                </label>
                                <div className="relative">
                                    <div className="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none">
                                        <SearchIcon
                                            className="w-5 h-5 text-gray-400"
                                            aria-hidden="true"
                                        />
                                    </div>
                                    <input
                                        id="search"
                                        name="search"
                                        className="block w-full py-2 pl-10 pr-3 leading-5 placeholder-gray-500 bg-white border border-gray-300 rounded-md focus:outline-none focus:placeholder-gray-400 focus:ring-1 focus:ring-blue-500 focus:border-blue-500 sm:text-sm"
                                        placeholder="Search NFT projects..."
                                        type="search"
                                    />
                                </div>
                            </div>
                            <Link href="/list-project" passHref>
                                <a
                                    href="#"
                                    className="items-center hidden px-4 py-2 ml-6 text-sm font-medium text-white bg-blue-600 border border-transparent rounded-md shadow-sm lg:inline-flex hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 whitespace-nowrap"
                                >
                                    List your Project
                                </a>
                            </Link>
                        </div>
                        <div className="flex items-center lg:hidden">
                            {/* Mobile menu button */}
                            <Disclosure.Button className="inline-flex items-center justify-center p-2 text-gray-400 rounded-md hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-blue-500">
                                <span className="sr-only">
                                    Open main menu
                                </span>
                                {open ? (
                                    <XIcon
                                        className="block w-6 h-6"
                                        aria-hidden="true"
                                    />
                                ) : (
                                    <MenuIcon
                                        className="block w-6 h-6"
                                        aria-hidden="true"
                                    />
                                )}
                            </Disclosure.Button>
                        </div>
                    </div>
                </div>

                <Disclosure.Panel className="lg:hidden">
                    <div className="pt-2 pb-3 space-y-1">
                        {/* {navLinks.map((link) => (
                            <NavLinkMobile
                                key={link.id}
                                href={link.href}
                                onClick={() => {
                                    console.log('click');
                                    close();
                                }}
                            >
                                {link.name}
                            </NavLinkMobile>
                        ))} */}

                        {navLinks.map((link) => (
                            <Disclosure.Button
                                as={NavLinkMobile}
                                key={link.id}
                                href={link.href}
                            >
                                {link.name}
                            </Disclosure.Button>
                        ))}

                        <NavLinkMobile href="/list-project">
                            List your Project
                        </NavLinkMobile>
                    </div>
                </Disclosure.Panel>
            </>
        )}
    </Disclosure>

尝试添加手动关闭单击,但似乎不起作用。

EN

回答 2

Stack Overflow用户

发布于 2022-01-10 14:44:02

诀窍是用<Disclosure.Button> </Disclosure.Button>包装链接,它将自动关闭面板。

请参阅:https://headlessui.dev/react/disclosure#closing-disclosures-manually

票数 1
EN

Stack Overflow用户

发布于 2022-07-20 22:09:42

尝试使用Next.js路由器的push函数在单击Disclosure.Button时导航用户。

在组件顶部,调用useRouter钩子:

代码语言:javascript
复制
const router = useRouter();

这样,就可以通过添加一个onClick属性来修改JSX,然后调用router.push({path}),如下所示:

代码语言:javascript
复制
{
  navLinks.map((link) => (
    <Disclosure.Button
      as="a"
      key={link.id}
      onClick={() => {
        router.push(`${link.href}`);
      }}
    >
      {link.name}
    </Disclosure.Button>
  ));
}

通过使用Next.js路由器,用户将导航到所需的href,同时仍然允许Disclosure支柱从打开切换到关闭。

要获得更多信息,请查看- https://nextjs.org/docs/api-reference/next/router#routerpush

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69386155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档