当前位置: 首页 > 知识库问答 >
问题:

为什么我的绑定不能在构造函数中工作

司徒啸
2023-03-14

我在做一个非常简单的两个按钮状态。如果我点击abutton,A组件显示,如果点击bButk,那么B组件。我正在映射通过数组的项目,以便每个项目都有自己的按钮状态。假设我点击项目1的按钮B,那么我只想要第一个项目B显示。现在所有这些都会同时被触发。我已经在构造函数中限制了它们,但我仍然无法只获得一次点击触发并显示相关组件。

class Home extends Component {


  constructor(props) {
    super(props);
    this.state = {
      lists: []
      showA: true,
      showB: false
    }
    this.aButtonHandler = this.aButtonHandler.bind(this);
    this.bButtonHandler = this.bButtonHandler.bind(this);
  }



  aButtonHandler = (e) => {
    this.setState({
      showA: true,
      showB: false 
    })
  }



  bButtonHandler = (e) => {
    this.setState({
      showA: false,
      showB: true
    })
  }




 render(){
    return (
      <div> 

       {this.state.lists.map(detail => 
        <li>{detail.id}</li>
        <button onClick={(e) => this.aButtonHandler(e)} >see A</button>
        <button onClick={(e) => this.bButtonHandler(e)} >see B</button> 

        {this.state.showA ? 
          <ComponentA />  : null
        }

        {this.state.showB ? 
           <ComponentB />  : null
         }
       )}

       </div>
      )
    }  

共有2个答案

孙德宇
2023-03-14

如果您想在构造函数中使用bind,则无需使用arrow函数,只需使用常规函数并将函数直接传递给onClick即可

aButtonHandler(e) { this.setState({ showA: true, showB: false }); }

bButtonHandler(e) { this.setState({ showA: false, showB: true }); }

render() {
  return (
    <div>
      {this.state.lists.map(detail => (
        <div>
          <li>{detail.id}</li>
          <button onClick={this.aButtonHandler}>see A</button>
          <button onClick={this.bButtonHandler}>see B</button>
          {this.state.showA ? <ComponentA /> : null}
          {this.state.showA ? <ComponentB /> : null}
        </div>
      ))}
    </div>
  );
洪承天
2023-03-14

如果使用箭头函数,则无需绑定函数。

如果您想绑定,那么将其更改为正常函数,如下所示。

aButtonHandler(e){...}
bButtonHandler(e){...}
 类似资料:
  • 问题内容: 我对此代码有疑问:https : //github.com/reactjs/redux/blob/master/examples/async/containers/App.js 特别: 我猜这是一个两部分的问题。 为什么我需要将句柄更改设置为类的实例,我不能只对handleChange使用静态函数并直接在类中调用它 ? 我不知道这是怎么回事: 谢谢 问题答案: 以相反的顺序回答… 返回

  • 问题内容: 如果将它们放在document.ready()函数中,则函数的定义为未定义: 为什么会这样?我确定我只需要一些简单的理解即可:) 问题答案: 不确定为什么在范围内定义函数对您很重要,但是您可以通过预先声明使其起作用: 显然,由于代码尚未运行,您之后不能立即从内联脚本中调用,但是您可以稍后再调用该函数。 只要确保在代码运行之前没有任何东西可以尝试调用(或进行无害函数的初始声明)。

  • 问题内容: 我是Java编程语言的初学者,最近我研究了 构造函数 不能在Java中继承,有人可以解释 为什么 吗? 问题答案: 简而言之,构造函数不能被继承,因为在子类中它具有​​不同的名称(子类的名称)。 您只能执行以下操作: 相反,方法是使用“相同名称”继承的,可以使用。 理由如下:继承构造函数没有多大意义,因为类A的构造函数意味着创建类型A的对象,而类B的构造函数意味着创建类B的对象。 不过

  • 使用scandir()函数时,我收到以下php警告: Scandir无法打开目录:公共html/page2中不允许操作。php在线3 第2页。php 我想使用这个功能来打印我的根文件夹的文件和子目录,但它不工作。 有人知道怎么修吗?

  • 问题内容: 据我所知,一个唯一可以做的事和一个不能做的事就是打电话给。 由于我们尚未调用,因此in 会在进入第一遍之前准备状态对象。本质上是相同的: 但是我看到了另一个有用的用例(在服务器端)。 让我们考虑一些异步的东西: 在这里,我们不能使用as分配来不会触发。 怎么样的?根据React docs : 在挂载发生之前立即调用。在之前调用),因此在此方法中设置状态不会触发重新渲染。避免在此方法中引

  • 问题内容: 为什么Java中的构造函数不能是final,static或abstract? 例如,您可以向我解释为什么这无效吗? 问题答案: 当您设置方法时,其含义是: “我不希望任何类覆盖它。” 但是根据Java语言规范: JLS 8.8- “构造函数声明不是成员。它们从不继承,因此不受隐藏或覆盖。” 当您设置方法时,其含义是: “此方法没有主体,应在子类中实现。” 但是,使用关键字时会隐式调用构