javascript - 如何隔离React.js上的点击事件?

标签 javascript reactjs

我研究了很长一段时间,但未能找到解决方案。我在几个按钮中有一个很棒的箭头切换,我正在尝试让它们切换。开关正在工作,但它们都在同时切换。如何将其隔离到仅被单击的组件?

我的示例很大,但我添加了这些按钮,它们几乎具有相同的功能......所以在这个示例中,我只想单击按钮来切换开始/停止文本。

class Button extends React.Component {
  constructor() {
    super();
    this.toggleState = this.toggleState.bind(this);
    this.state = {
      isActive : false
    }
  }

  toggleState() {
    this.setState({isActive:!this.state.isActive});
  }

  render() {
    return(
      <div>
         <button className={this.state.isActive ? 'active' : 'inactive'} onClick ={this.toggleState}>{this.state.isActive ? 'STOP' : 'START'}</button>
         <button className={this.state.isActive ? 'active' : 'inactive'} onClick ={this.toggleState}>{this.state.isActive ? 'STOP' : 'START'}</button>
         <button className={this.state.isActive ? 'active' : 'inactive'} onClick ={this.toggleState}>{this.state.isActive ? 'STOP' : 'START'}</button>
      </div>
    );
  }
}

ReactDOM.render(<Button />,document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

最佳答案

原因是,您使用单个state变量来控制所有按钮。不是使用数组,而是数组的每个值都针对特定按钮。要切换 toggleState 函数内按钮的状态,请同时传递索引并使用该索引来切换特定项目。

像这样:

class Button extends React.Component {
   constructor() {
      super();
      this.state = {
         isActive : []
      }
  }
  
  toggleState(i) {
      let isActive = [...this.state.isActive];
      isActive[i] = !isActive[i];
      this.setState({isActive});
  }
  
  render() {
      return(
         <div>
            <button onClick = {() => this.toggleState(0)}>{this.state.isActive[0] ? 'STOP' : 'START'}</button>
            <button onClick = {() => this.toggleState(1)}>{this.state.isActive[1] ? 'STOP' : 'START'}</button>
            <button onClick = {() => this.toggleState(2)}>{this.state.isActive[2] ? 'STOP' : 'START'}</button>
        </div>
     );
  }
}

ReactDOM.render(<Button/>,document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

关于javascript - 如何隔离React.js上的点击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44163779/

相关文章:

JavaScript/React/Node : Writing values to an existing excel file with condition

javascript - componentDidMount 最初不呈现我的数据,仅在 componentDidUpdate 上呈现

javascript - 设置超时以任何条件停止

javascript - js中的二维数组

javascript - 如何通过js给运行时自动生成的图片应用类

javascript - jQuery - 按单元格值对 tr 着色

javascript - react : How to make password characters visible when typing each character and hide(*) after few time interval in react?

JavaScript - 对同一字段上的 2 个对象数组进行排序

javascript - React 严格模式和双重渲染

javascript - Enzyme 在浅层渲染的 React 组件上为 prop 返回 null