Hie*_*ero 24 javascript reactjs
我正在使用一个项目,我有一个菜单按钮.
<a ref="btn" href="#" className="btn-menu show-on-small"><i></i></a>
Run Code Online (Sandbox Code Playgroud)
Sidenav组件如:
<Sidenav ref="menu" />
Run Code Online (Sandbox Code Playgroud)
我编写了以下代码来切换菜单:
class Header extends React.Component {
constructor(props){
super(props);
this.toggleSidenav = this.toggleSidenav.bind(this);
}
render() {
return (
<div className="header">
<i className="border hide-on-small-and-down"></i>
<div className="container">
<a ref="btn" href="#" className="btn-menu show-on-small"><i></i></a>
<Menu className="menu hide-on-small-and-down"/>
<Sidenav />
</div>
</div>
)
}
toggleSidenav() {
this.refs.btn.classList.toggle('btn-menu-open');
}
componentDidMount() {
this.refs.btn.addEventListener('click', this.toggleSidenav);
}
componentWillUnmount() {
this.refs.btn.removeEventListener('click', this.toggleSidenav);
}
}
Run Code Online (Sandbox Code Playgroud)
事情是,这this.refs.sidenav不是一个DOM元素,我不能在他身上添加一个类.
有人可以解释我如何Sidenav在我的按钮上切换组件上的类吗?
Aar*_*nco 24
如果希望React正确有效地呈现DOM,则必须使用组件的State来更新组件参数,例如Class Name.
更新:我更新了示例以按下按钮切换Sidemenu.这不是必需的,但你可以看到它是如何工作的.您可能需要使用"this.state"与"this.props",如我所示.我习惯使用Redux组件.
constructor(props){
super(props);
}
getInitialState(){
return {"showHideSidenav":"hidden"};
}
render() {
return (
<div className="header">
<i className="border hide-on-small-and-down"></i>
<div className="container">
<a ref="btn" onClick={this.toggleSidenav.bind(this)} href="#" className="btn-menu show-on-small"><i></i></a>
<Menu className="menu hide-on-small-and-down"/>
<Sidenav className={this.props.showHideSidenav}/>
</div>
</div>
)
}
toggleSidenav() {
var css = (this.props.showHideSidenav === "hidden") ? "show" : "hidden";
this.setState({"showHideSidenav":css});
}
Run Code Online (Sandbox Code Playgroud)
现在,当您切换状态时,组件将更新并更改sidenav组件的类名.您可以使用CSS使用类名显示/隐藏sidenav.
.hidden {
display:none;
}
.show{
display:block;
}
Run Code Online (Sandbox Code Playgroud)
Bik*_*kas 13
refs不是DOM元素.为了找到DOM元素,您需要先使用findDOMNodementhod.
做这个
var node = ReactDOM.findDOMNode(this.refs.btn);
node.classList.toggle('btn-menu-open');
Run Code Online (Sandbox Code Playgroud)
或者,您可以这样使用(几乎是实际代码)
this.state.styleCondition = false;
<a ref="btn" href="#" className={styleCondition ? "btn-menu show-on-small" : ""}><i></i></a>
Run Code Online (Sandbox Code Playgroud)
然后,您可以styleCondition根据状态变化条件进行更改.
| 归档时间: |
|
| 查看次数: |
75619 次 |
| 最近记录: |