javascript - 在 React 中切换类

标签 javascript reactjs

我正在将 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 组件上切换类吗?

最佳答案

如果你希望 React 正确高效地渲染 DOM,你必须使用组件的 State 来更新组件参数,例如类名。

更新:我更新了示例以通过单击按钮切换侧菜单。这不是必需的,但您可以看到它是如何工作的。正如我所示,您可能需要使用“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});
}

现在,当您切换状态时,组件将更新并更改 sidenav 组件的类名称。您可以使用 CSS 使用类名称显示/隐藏侧导航。

.hidden {
   display:none;
}
.show{
   display:block;
}

关于javascript - 在 React 中切换类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36403101/

相关文章:

javascript - 我可以同步两个不同年份(闰年)的 highcharts 系列吗

javascript - 在react-native中加载动态资源

reactjs - StackNavigation 内的模态模式屏幕

javascript - 如何清除Material ui的TextField

javascript - 如何从另一个组件 react 调用/执行方法/函数

javascript - 从动态创建的按钮获取文本值jquery

javascript - 寻找最接近的可能坐标

javascript - 如何使用 Jest 测试同一个类中的方法调用?

javascript - 过多的 JSON 会使浏览器崩溃 :(

python - 无法读取未定义的 Dash DataTable 的属性 'fantasy-land/map' 使用下拉列表更新表