【问题标题】:React toggle class反应切换类
【发布时间】:2020-05-22 12:47:42
【问题描述】:

我只想切换类单击元素。但是现在当我点击任何人时,他们都处于活动状态。当我单击一个标签时,我想向卡片 div 添加另一个类。我应该如何更新代码?

 handleClick() {
        const currentState = this.state.active;
        this.setState({ active: !currentState });
    }
<div className="container">
   <div>
     <h1>Components</h1>
     <div>
        <a href="#" onClick={this.handleClick.bind(this)} className= {this.state.active ? "card-icon active" : "card-icon"}>click</a>
        <a href="#" onClick={this.handleClick.bind(this)} className= {this.state.active ? "list-icon active" : "list-icon"}>click</a>
     </div>
   </div>
   <input type="text" placeholder="" className="input" onChange={(e)=>this.searchSpace(e)}  />
   <div className="card">
     {items}
   </div>
</div>

【问题讨论】:

    标签: javascript html css reactjs toggle


    【解决方案1】:

    您仅使用一个变量(活动)跟踪状态,但您需要分别跟踪每个状态。试试这个:

    更新为处理切换:

     handleClick() {
            const currentState = this.state.active;
            this.setState({ active: !currentState });
        }
    
    <div className="container">
       <div>
         <h1>Components</h1>
         <div>
            <a href="#" onClick={this.handleClick.bind(this)} className= {this.state.active ? "card-icon active" : "card-icon"}>click</a>
            <a href="#" onClick={this.handleClick.bind(this)} className= {!this.state.active ? "list-icon active" : "list-icon"}>click</a>
         </div>
       </div>
       <input type="text" placeholder="" className="input" onChange={(e)=>this.searchSpace(e)}  />
       <div className={this.state.active ? "card" : "list"}>
         {items}
       </div>
    </div>
    

    【讨论】:

    • 谢谢!没关系,但我无法正确解释。当我单击的元素处于活动状态时,另一个不应处于活动状态。
    • 所以你希望它被切换而不是同时激活?
    • 是的,同时
      这个类应该把card改成list
    • 非常感谢!它几乎发生了,但是当我点击两个标签时都是活动的:(
    • 你添加了!对于 !this.state.active ? “列表图标活动”?
    【解决方案2】:

    您应该使用多个状态变量并使用函数来更新状态,因此当您将购物车图标设置为活动时,列表图标状态不会改变。 请参见下面的示例。如果有帮助,请告诉我。

    class MyComp extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          cartIconActive: false,
          listIconActive: false,
        };
        this.handleCartIconClick = this.handleCartIconClick.bind(this);
        this.handleListIconClick = this.handleListIconClick.bind(this);
      }
    
      handleCartIconClick() {
        this.setState((prevState) => ({
          ...prevState,
          cartIconActive: !prevState.cartIconActive,
        }));
      }
    
      handleListIconClick() {
        this.setState((prevState) => ({
          ...prevState,
          listIconActive: !prevState.listIconActive,
        }));
      }
    
      render() {
        const { cartIconActive, listIconActive } = this.state;
        return (
          <div className="container">
            <div>
              <h1>Components</h1>
              <div>
                <a
                  href="#"
                  onClick={this.handleCartIconClick}
                  className={cartIconActive ? 'card-icon active' : 'card-icon'}
                >
                  click
                </a>
                <a
                  href="#"
                  onClick={this.handleListIconClick}
                  className={listIconActive ? 'list-icon active' : 'list-icon'}
                >
                  click
                </a>
              </div>
            </div>
            <input
              type="text"
              placeholder=""
              className="input"
              onChange={(e) => this.searchSpace(e)}
            />
            <div className="card">{items}</div>
          </div>
        );
      }
    }
    
    
    

    【讨论】:

      【解决方案3】:

      你也可以这样做

      function MyComponent (props) {
        const [isActive, setActive] = useState(false);
      
        const toggleClass = () => {
          setActive(!isActive);
        };
      
        return (
          <div 
            className={isActive ? 'your_className': null} 
            onClick={toggleClass} 
          >
            <p>{props.text}</p>
          </div>
         );
      }  
      

      【讨论】:

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