【发布时间】:2016-07-24 00:30:23
【问题描述】:
我在一个有菜单按钮的项目中使用 react。
<a ref="btn" href="#" className="btn-menu show-on-small"><i></i></a>
还有一个 Sidenav 组件,例如:
<Sidenav ref="menu" />
我编写了以下代码来切换菜单:
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);
}
}
问题是this.refs.sidenav 不是 DOM 元素,我无法在他身上添加类。
谁能解释我如何在Sidenav 组件上切换类,就像我在按钮上做的那样?
【问题讨论】:
-
您做错了,因为您使用 DOM 而不是 React 组件渲染方法更改类和事件处理程序。你能添加你的组件的代码吗?
-
已更新,请告诉我如何做得更好
-
@Hiero 这是对 React 的根本误解。您实际上是在 DOM 中存储状态,您应该不惜一切代价避免这种情况。相反,您应该跟踪
state中按钮的可见性,并根据该状态在render()中动态声明className- 请参阅facebook.github.io/react/docs/…
标签: javascript reactjs