Next.js Discord

Discord Forum

Toggle Menu Open

Answered
Bonga shad posted this in #help-forum
Open in Discord
Bonga shadOP
in mobile device i am click any link route chnaged but toggle menu is always open when i click close menu icon then it will be close .
Answered by Bonga shad
'use client'
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import { useState } from 'react';
import { RiMenu4Fill, RiCloseFill } from 'react-icons/ri';

const ToggleMenu = () => {
  // js here
  const [isOpen, setIsOpen] = useState(false);

  const toggleMenu = () => setIsOpen(!isOpen)
  const router = useRouter();
  const logpage = () => {
    router.push("/login")
    toggleMenu()
  }
  return (
    <div className="toggle-menu">
      <button onClick={toggleMenu} className="toggle-button text-white">
        {isOpen ? <RiCloseFill /> : <RiMenu4Fill />} 
      </button>

        <div className="menu">
            <ul className={isOpen ? "w-full p-5 absolute top-full right-0 bg-dblack z-10 transition-all duration-500 ease-in-out" : "w-full p-5 absolute top-full right-full bg-dblack z-10 transition-all duration-500 ease-in-out"} id="toggle_menu">
                <li><Link className="link" href="/" onClick={()=>toggleMenu()}>Home</Link></li>
                <li><Link className="link" href="/card" onClick={()=>toggleMenu()}>Cards</Link></li>
                <li><Link className="link" href="#" onClick={()=>toggleMenu()}>Features</Link></li>
                <li><Link className="link" href="#" onClick={()=>toggleMenu()}>FAQs</Link></li>
                <li><Link className="link" href="/contact" onClick={()=>toggleMenu()}>Contact Us</Link></li>
                <li><button onClick={()=>logpage()} className="btn-primary text-center w-full" href="/login">Login</button></li>
            </ul>
        </div>
    </div>
  );
};

export default ToggleMenu;
View full answer

2 Replies

Bonga shadOP
'use client'
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import { useState } from 'react';
import { RiMenu4Fill, RiCloseFill } from 'react-icons/ri';

const ToggleMenu = () => {
  // js here
  const [isOpen, setIsOpen] = useState(false);

  const toggleMenu = () => setIsOpen(!isOpen)
  const router = useRouter();
  const logpage = () => {
    router.push("/login")
    toggleMenu()
  }
  return (
    <div className="toggle-menu">
      <button onClick={toggleMenu} className="toggle-button text-white">
        {isOpen ? <RiCloseFill /> : <RiMenu4Fill />} 
      </button>

        <div className="menu">
            <ul className={isOpen ? "w-full p-5 absolute top-full right-0 bg-dblack z-10 transition-all duration-500 ease-in-out" : "w-full p-5 absolute top-full right-full bg-dblack z-10 transition-all duration-500 ease-in-out"} id="toggle_menu">
                <li><Link className="link" href="/" onClick={()=>toggleMenu()}>Home</Link></li>
                <li><Link className="link" href="/card" onClick={()=>toggleMenu()}>Cards</Link></li>
                <li><Link className="link" href="#" onClick={()=>toggleMenu()}>Features</Link></li>
                <li><Link className="link" href="#" onClick={()=>toggleMenu()}>FAQs</Link></li>
                <li><Link className="link" href="/contact" onClick={()=>toggleMenu()}>Contact Us</Link></li>
                <li><button onClick={()=>logpage()} className="btn-primary text-center w-full" href="/login">Login</button></li>
            </ul>
        </div>
    </div>
  );
};

export default ToggleMenu;
Answer
Asian black bear
In the onclick of the li's you should be calling onClick={()=>setIsOpen(false)} -> you don't want to be navigating to the login screen every time except for the Login link