I'm trying to create a hamburger menu within React using state and onClick, from scratch. I have no experience with React Hooks so am trying to avoid that. The solution I have right now works, but is slow and glitchy and I have a feeling the code is quite flawed.
I deployed it anyways to test it out in live, and it's not working well at all in mobile chrome browser (https://vigilant-leavitt-a88a0e.netlify.app/). (though at least the background-color works when inspecting on a browser at mobile dimensions).
Can anyone tell me what I'm doing wrong here, or how this could be cleaned up? I have app.js feeding props to header.js.
Thank you!
App.js
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
menuOpen: false
};
}
componentDidMount() {
this.setState({
menuOpen: false
});
}
handleMenuClick = () => {
this.setState({ menuOpen: true });
}
handleCloseMenuClick = () => {
this.setState({ menuOpen: false });
}
render() {
return (
<>
<Router>
<Header
menuOpen={this.state.menuOpen}
handleMenuClick={this.handleMenuClick}
handleCloseMenuClick={this.handleCloseMenuClick} />
<Switch>
<Route path="/resources"><Resources /></Route>
<Route path="/team"><Team /></Route>
<Route path="/faq"><Faq /></Route>
<Route path="/fees"><Fees /></Route>
<Route path="/"><Home /></Route>
</Switch>
<Footer />
</Router>
</>
);
}
}
Header.js
<div className="header__navburger">
{props.menuOpen === false ?
(<img
className="header__hamburger-icon"
alt="Menu"
src={menuicon}
onClick={() => props.handleMenuClick()}
/>) :
(<div className="header__navburger-close">
<img
className="header__close-icon"
alt="Close Menu"
src={closeicon}
onClick={() => props.handleCloseMenuClick()}
/>
<nav className="header__nav-list">
<Link to={`/home`} className="header__nav-link"
onClick={() => props.handleCloseMenuClick()}>Home</Link>
<Link to={`/resources`} className="header__nav-link"
onClick={() => props.handleCloseMenuClick()}>Patient Resources</Link>
<Link to={`/team`} className="header__nav-link"
onClick={() => props.handleCloseMenuClick()}>Meet the Team</Link>
<Link to={`/faq`} className="header__nav-link"
onClick={() => props.handleCloseMenuClick()}>FAQ</Link>
<Link to={`/fees`} className="header__nav-link"
onClick={() => props.handleCloseMenuClick()}>Fees</Link>
</nav>
</div>
)}
</div>