Reputation: 149
In the code below, when I click on the burger menu, the design changes from burger to an X and the menu opens successfully. However, when I click on a link within the menu, the menu does close BUT the X menu does NOT change its design back to a burger.In other words, the menu closes but the css of the icon does not change back. Does anyone know what I am doing wrong?
const handleClick = (event: any) => {
if (!menuOpen) {
event.currentTarget.classList.add("open");
setMenu(true);
} else {
event.currentTarget.classList.remove("open");
setMenu(false);
}
};
<div className="mt-4 container page-container">
<div className="row">
<div className="d-grid gap-2 pb-3 col-4 mx-auto ">
<div className="menu-btn" onClick={handleClick}>
<div className="menu-btn_burger"></div>
</div>
</div>
</div>
{menuOpen && (
<div className="row">
<div className="d-grid gap-2 pt-3 col-6 mx-auto ">
<Link to="/add" onClick={handleClick} className="btn btn-primary btn-sm ">
Add Task
</Link>
<Link to="/" onClick={handleClick} className="btn btn-primary btn-sm">
All Reminders <span className="badge badge-light text-dark">{tasks.length > 0 && tasks.length}</span>
</Link>
</div>
</div>}
Upvotes: 0
Views: 175
Reputation: 125
The problem is from the event target
In the first case, the target is the div with class menu-button but in the second case, it is referring to the link element.
How to solve it?
Use Refs
const menuRef = useRef(null);
const handleClick = (event: any) => {
if (!menuOpen) {
menuRef.current.classList.add("open");
setMenu(true);
} else {
menuRef.current.classList.remove("open");
setMenu(false);
}
};
<div className="mt-4 container page-container">
<div className="row">
<div className="d-grid gap-2 pb-3 col-4 mx-auto ">
<div ref={menuRef} className="menu-btn" onClick={handleClick}>
<div className="menu-btn_burger"></div>
</div>
</div>
</div>
{menuOpen && (
<div className="row">
<div className="d-grid gap-2 pt-3 col-6 mx-auto ">
<Link to="/add" onClick={handleClick} className="btn btn-primary btn-sm ">
Add Task
</Link>
<Link to="/" onClick={handleClick} className="btn btn-primary btn-sm">
All Reminders <span className="badge badge-light text-dark">{tasks.length > 0 && tasks.length}</span>
</Link>
</div>
</div>}
see more in the official docs React Ref
Upvotes: 1