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

如何实现选择导航链接后自动关闭Mantine Burger组件

问题描述

我希望在模态框中选择导航选项后,自动关闭Mantine Burger组件,但目前该组件无法自动关闭(关闭图标仍显示)。项目基于NextJS、Mantine及react-icons开发。

代码片段

export default function HeaderMiddle({ links }: HeaderMiddleProps) {
  const { colorScheme, toggleColorScheme } = useMantineColorScheme();
  const dark = colorScheme === 'dark';

  const [opened, { toggle, open, close }] = useDisclosure(false, {
    onOpen: () => burgerClick(),
    onClose: () => closeAllModals(),
  });
  const [active, setActive] = useState(links[0].link);
  const { classes, cx } = useStyles();

  const items = links.map((link) => (
    <a
      key={link.label}
      href={link.link}
      className={cx(classes.link, {
        [classes.linkActive]: active === link.link,
      })}
      onClick={(event) => {
        event.preventDefault();
        setActive(link.link);
      }}
    >
      {link.label}
    </a>
  ));

  const burgerItems = links.map((link) => (
    <a
      key={link.label}
      href={link.link}
      className={cx(classes.link, {
        [classes.linkActive]: active === link.link,
      })}
      onClick={(event) => {
        event.preventDefault();
        setActive(link.link);
        closeAllModals();
      }}
    >
      {link.label}
    </a>
  ));

  const burgerClick = () => {
    openModal({
      title: 'Subscribe to newsletter',
      children: <> {burgerItems} </>,
    });
  };

  return (
    <Header height={56} mb={120}>
      <Container className={classes.inner}>
        <Burger
          opened={opened}
          onClick={toggle}
          size="sm"
          className={classes.burger}
        />
        <Group className={classes.links} spacing={5}>
          {items}
        </Group>

        {/* <MantineLogo size={28} /> */}

        <Group spacing={0} className={classes.social} position="right" noWrap>
          ...
        </Group>
      </Container>
    </Header>
  );
}

项目版本

  • next: 12.1.5
  • @mantine/core: 4.2.12
解决方案

问题核心是点击模态框内的导航选项时,仅关闭了模态框,但未更新Burger组件绑定的opened状态。只需在点击事件中同时调用useDisclosure提供的close()方法,即可重置Burger的展开状态。

修改burgerItems的点击逻辑,添加close()调用:

const burgerItems = links.map((link) => (
  <a
    key={link.label}
    href={link.link}
    className={cx(classes.link, {
      [classes.linkActive]: active === link.link,
    })}
    onClick={(event) => {
      event.preventDefault();
      setActive(link.link);
      closeAllModals();
      close(); // 新增:关闭Burger的展开状态
    }}
  >
    {link.label}
  </a>
));

修改后,点击模态框中的导航选项时,会同时关闭模态框并将Burger组件的状态重置为关闭,图标也会从关闭样式变回汉堡样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:15:29