亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

單擊導航鏈接后無法關閉全屏菜單

單擊導航鏈接后無法關閉全屏菜單

慕神8447489 2023-11-12 22:09:34
問題當我單擊鏈接時,全屏菜單不想關閉。如果我使用 html 標簽 a 并且一切正常,則 NavLink 元素會出現此問題。這里我有一個功能,可以讓我在按下其中一個鏈接時關閉。我之前提到過它僅適用于 href 標簽。import { useEffect } from "react";export const useOnClickOutside = (ref, handler) => {  useEffect(() => {    const listener = (event) => {      if (!ref.current || ref.current.contains(event.target)) {        return;      }      handler(event);    };    document.addEventListener("mousedown", listener);    return () => {      document.removeEventListener("mousedown", listener);    };  }, [ref, handler]);};這是主菜單組件const MobileMenu = () => {  const [open, setOpen] = useState(false);  const ref = useRef();  useOnClickOutside(ref, () => setOpen(false));  return (    <MobileMenuWrapper ref={ref}>      <BurgerIcon open={open} setOpen={setOpen} />      <MobileMenuList open={open} setOpen={setOpen}>        <MenuLinks />      </MobileMenuList>    </MobileMenuWrapper>  );};和鏈接組件const MenuLinks = () => {  return (    <>      <ul>        <li>          <NavLink to="/"> Home</NavLink>        </li>        <li>          <NavLink to="/albums">Albums</NavLink>        </li>        <li>          <NavLink to="/addAlbum">Add Album</NavLink>        </li>        <li>          <NavLink to="/about">About</NavLink>        </li>        <li>          <NavLink to="/contact">Contact</NavLink>        </li>      </ul>    </>  );};
查看完整描述

1 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

經過幾個小時的搜索錯誤后我解決了它


const [open, setOpen] = useState(false);


  const ref = useRef();

  // on link click change open to false

  useOutsideClick(ref, () => {

    if (open) setOpen(false);

  });


  return (

    <MobileMenuWrapper ref={ref}>

      <BurgerIcon open={open} setOpen={setOpen} />

      <MobileMenuList open={open} setOpen={setOpen}>

        <MenuLinks />

      </MobileMenuList>

    </MobileMenuWrapper>

  );

和鉤子


export const useOutsideClick = (ref, callback) => {

  const handleClick = (e) => {

    if (ref.current && ref.current.contains(e.target)) {

      callback();

    }

  };


  useEffect(() => {

    document.addEventListener("click", handleClick);


    return () => {

      document.removeEventListener("click", handleClick);

    };

  });

};


查看完整回答
反對 回復 2023-11-12
  • 1 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號