反应切换 class

React toggle class

我想切换 class 仅单击元素。但现在当我点击任何人时,他们都处于活动状态。当我单击一个标签时,我想将另一个 class 添加到卡片 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>

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

已更新以处理切换:

 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>

您应该使用多个状态变量并使用函数来更新状态,这样当您将购物车图标设置为活动状态时,列表图标状态不会改变。 请参见下面的示例。让我知道是否有帮助。

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>
    );
  }
}


您也可以使用

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>
   );
}