【问题标题】:how to change classes on clicking in react?如何在点击反应时更改课程?
【发布时间】:2020-10-21 12:19:16
【问题描述】:

代码如下:

state: {
    button: "notclicked"
}

changeclass = () => {
    this.setState({ button: "clicked" })
} 

<ul>  
    <li className="linkactive">
        <a class="vote-up-off" onClick={ this.changeclass } href="/">
            <Icon className={ this.state.button } className=" fa fa-area-chart"/>
        </a>
    </li>
    <li>
        <a class="vote-up-off"href="/">
            <Icon className="fa fa-bar-chart fa-2x"/> 
        </a>
    </li>
    <li>
        <a class="vote-up-off" href="/>
            <Icon className="fa fa-line-chart"/>
        </a>
    </li>
</ul>

我可以点击&lt;li&gt;更改班级,但是点击另一个&lt;li&gt;,如何让上一个班级回到notclicked

我想向用户显示他当前所在的标签页

【问题讨论】:

  • 你的意思是再次点击
  • ?如果没有,那么您可以在要单击的
  • 上放置另一个 onClick,您可以将类名作为参数传递给您 changeclass()
  • 在我们解决切换类问题之前,您需要解决一些问题,这一行 &lt;Icon className={this.state.button} className=" fa fa-area-chart"/&gt; 是错误的,您应该使用 Template Literals 像这样 &lt;Icon className=`${this.state.button} fa fa-area-chart`/&gt;
  • @RicardoSanchez,他们为什么需要模板文字?在我看来,按原样使用字符串是非常好的。
  • 如果可能,请提供整个组件的代码实现,以便我们可以准确地看到您的代码中发生了什么
  • @Séraphin 据我所知,只有一个 className 道具是一种很好的做法,这就是为什么我建议使用模板文字,但我可能错了,所以我不应该做对我的第一条评论的断言。
  • 标签: reactjs


    【解决方案1】:

    changeClass() 函数现在发生的情况是,每次单击链接时,state.button 都会设置为 "clicked"

    您可以在此方法中执行的操作是首先检查按钮的值并将其设置为其他值。 例如:

    changeclass=()=>{
        if(this.state.button === "notclicked"){
          this.setState({button:"clicked"}) 
      }
        else {
          this.setState({button:"notclicked"})
      }
    
    } 
    

    然后,如果您希望每个&lt;li&gt; 触发您的changeclass 函数,则必须为每个onClick 设置。

    另外,您的代码中有一些拼写错误:

    • onClicke 必须是 onClick
    • 在最后一个&lt;a&gt;标签中,除了href之外的字符串没有闭合(缺少"

    总而言之,这段代码应该可以按预期工作:

    state:{
    button:"notclicked"
    }
    
    changeclass = () => {
        if(this.state.button === "notclicked"){
          this.setState({button:"clicked"}) 
      }
        else {
          this.setState({button:"notclicked"})
      }
    
    } 
    
    <ul>
                 
        <li className="linkactive"><a class="vote-up-off" onClick={this.changeclass} href="/"><Icon className={this.state.button} className=" fa fa-area-chart"/></a></li>
         <li><a class="vote-up-off"href="/" onClick={this.changeclass}><Icon className="fa fa-bar-chart fa-2x"/></a></li>
        <li><a class="vote-up-off" href="/" onClick={this.changeclass}><Icon className="fa fa-line-chart"/></a></li>   
    
    </ul>
    

    【讨论】:

      【解决方案2】:

      你可以这样试试

      // lets assume initial state is false
      state = {clicked : false}
      

      稍后在您的组件中,如果这样做,您将制作三元组

      changeClicked = ()=>{
        // this setState will take what you have previously, and
        // will change it to opposite value
        this.setState(prev=>({clicked: !prev.clicked}))
      }
      
      //...
      
      <a onClick={this.changeClicked}>
        <Icon className={clicked ? "clicked":"notclicked"} />
      </a>
      

      我的建议是,如果您有一些相反的东西,例如 clicked-notclicked、on-off、up-down 等,当相反的情况为 false 时,本质上一个总是正确的,请使用 boolean

      它将帮助您前进。

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签