Javascript 无法使用React实现侧导航栏
我想使用react实现一个汉堡包侧导航栏,但我无法实现必须在单击汉堡包时显示的更改。我仍在学习React,因此请解释我做错了什么,并随时提出替代方法。这是我的密码Javascript 无法使用React实现侧导航栏,javascript,html,css,reactjs,react-native,Javascript,Html,Css,Reactjs,React Native,我想使用react实现一个汉堡包侧导航栏,但我无法实现必须在单击汉堡包时显示的更改。我仍在学习React,因此请解释我做错了什么,并随时提出替代方法。这是我的密码 import React from 'react'; import * as FaIcons from "react-icons/fa"; class Navbar extends React.Component { constructor() { super(); thi
import React from 'react';
import * as FaIcons from "react-icons/fa";
class Navbar extends React.Component {
constructor() {
super();
this.state = {
navbarState : 1,
style : {}
}
}
openNav() {
this.setState({"width" : "250px"});
}
closeNav() {
this.setState({"width" : "0px"});
}
handleClick() {
this.setState((prevState) => {
if(prevState.navbarState === 0) {
return {navbarState : 1, style : {width : '250px'}};
}
else {
return {navbarState : 0, style : {width : '0px'}};
}
});
}
render() {
return (
<div>
<div id="mySidenav" className="sidenav" style={this.state.style} >
{console.log(this.state.navbarState)}
<a href="#" className="closebtn" onClick={() => this.handleClick}>×</a>
<a href="#">About</a>
<a href="#">Services</a>
<a href="#">Clients</a>
<a href="#">Contact</a>
</div>
<span onClick={() => this.handleClick}>
{/* <FaIcons.FaBars /> */}
<div className = "hamburger">
<div className="line"></div>
<div className="line"></div>
<div className="line"></div>
</div>
</span>
</div>
);
}
}
export default Navbar;
首先,看起来您使用的是基于类的组件,并且没有正确绑定
handleClick
函数。解决方法是将其绑定到构造函数中,或者使用如下箭头函数:
handleClick = () => { ... }
这同样适用于其他两个函数。有关Arrow函数和在基于类的组件中绑定函数的更多信息,请参阅:
其次,我怀疑在您的
中调用了handleClick
。而不是
<span onClick={() => this.handleClick} ... />
this.handleClick}…/>
试一试
或this.handleClick()}…/>
让我知道这是否有帮助 非常感谢你的帮助。我做了你建议的改变。它工作得很好,除了我需要点击汉堡两下才能打开它。是因为状态更改过程需要时间,还是我的pogram中有错误?不,它应该只需单击一次。我建议你在这里简化一点,只需要navbarState
这是一个布尔值(真/假),然后在handleClick
中,你只需要this.setState({navbarState:!this.state.navbarState})
并像这样控制你的navbar样式:style={{{width:navbarState?'250px':'0px}
。
<span onClick={() => this.handleClick} ... />
<span onClick={this.handleClick} ... /> or <span onClick={() => this.handleClick()} ... />