在反应中替代切换 class

Alternate for toggle class in react

这是 html 显示导航图标的代码

   <div>
        <div id="mob-nav"  className={this.state.navbar + " right"}>
       <div onClick={this.toggle.bind(this)}>
         <div>click me</div>
       <div></div>
       <div></div>
      </div>
      <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">2</a></li>
      <li><a href="#">3</a></li>
      <li><a href="#">5</a></li>
      <li><a href="#"> 6</a></li>
      <li><a href="#">7</a></li>
      <li><a href="#">8</a></li>
      </ul>
    </div>
       <div id="left_panel">
        <div className="title">
          Naveen Tool
        </div>
        <div className="user_name">
            Name
        </div>
        <div className="submenu">
          <a href="structuring">Home</a>
          <a href="#">Log out</a>
        </div>
        </div>
    </div>

这里是 css 切换导航的代码

 #mob-nav {
    position:fixed;
    z-index:1000;
    top:0px;
    bottom:0px;
    width:270px;
    -webkit-box-shadow: inset -11px 0px 33px -10px rgba(51,51,51,1);
    -moz-box-shadow: inset -11px 0px 33px -10px rgba(51,51,51,1);
    box-shadow: inset -11px 0px 33px -10px rgba(51,51,51,1);
    background-color: rgba(0,0,0,0.8);
    transform: translate3d(-270px,0,0);
    transition: transform 300ms ease;
}
.active-mob-nav #mob-nav {
    transform: translate3d(0,0,0);
}
#mob-nav ul{
    list-style:none;
    width: 100%;
padding: 0px;
}

.table_border{
  border: 1px solid black;
}

#mob-nav ul li a{
    display:block;
    text-align:center;
    text-decoration:none;
    color:#fff;
    background-color:#2e2e2e;
    padding:25px 0px;
}
#mob-nav ul li a:hover{
    background-color:#2eb187;
}
   .mob-nav-btn {
       position:absolute;
    left: 275px;
    top: 18px;
    line-height: 10px;
    padding: 16px;
       cursor:pointer;
       border-radius: 0px 10px 10px 0px;
       -moz-border-radius: 0px 10px 10px 0px;
       -webkit-border-radius: 0px 10px 10px 0px;
   }
   .mob-nav-btn > div{
       background-color: #f7f7f7;
    width: 25px;
       margin-top: 2px;
    margin-bottom: 2px;
    display: inline-block;
    margin-left: auto;
    margin-right: auto;
    height: 2px;
       transition: all 300ms;
   }
   .mob-nav-btn:hover > div{
       width: 30px;
       border-radius:0px;
   }

在 React 中,我尝试设置单击导航按钮时的状态。React 状态正在改变,但导航栏未打开。

 toggle(){
 this.setState({
  navbar :"active-mob-nav"
 })

 }

我在开发者工具中看到元素,状态正在改变。导航栏打不开 有人可以向我解释如何像在 onClick() 上那样在导航栏上切换 class 吗?

我认为问题出在你的 CSS 而不是反应。你 CSS (.active-mob-nav #mob-nav) 说 active-mob-nav 有一个 child 和 id mob-nav,而 mob-nav 有一个 child .active-mob-nav。尝试改变您的 CSS 以获得预期的行为

嵌套顺序错误。

使用样式:

#mob-nav.active-mob-nav {
    transform: translate3d(0,0,0);
}

并将 className 设置为顶级 div:

<div id="mob-nav"  className={this.state.navbar + " right"}>

https://jsfiddle.net/69z2wepo/85223/