如何处理循环中特定按钮的点击?

How to handle click on specific button in loop?

我创建了以下设计:

这里是 react js 代码:

 {this.props.BetSlipDataObj.betDetails.data.map(
                (value, index) => {
                <div className="d-flex justify-content-end">
                          <button
                            className="info-button"
                            data-toggle="collapse"
                            href="#collapseExample"
                            role="button"
                            aria-expanded="false"
                            aria-controls="collapseExample"
                            // onClick={
                            //   value.betId != null
                            //     ? _this.getBetIdDetails(value.betId)
                            //     : value.childId != null
                            //     ? _this.getBetIdDetails(value.childId)
                            //     : ""
                            // }
                          >
                       </div>
                       })}

我正在尝试执行以下任务 如果我单击一个按钮,它应该展开框 但是,如果我单击一个按钮,所有框都会展开。 如果我在点击时调用某个方法,它会被无限调用

有人可以帮我更正代码吗?

解决方案似乎很简单。您直接在 onClick 中执行一个函数。这就是为什么他们都被处决了。您只需按如下方式更改 onClick:

onClick = { ()  => {
    if(value.betId != null){
     _this.getBetIdDetails(value.betId)
} else if (value.childId != null){
     _this.getBetIdDetails(value.childId)
} else {return ""} }

您可以在单击按钮时调用函数。我认为它是无限调用的,因为你没有传递对函数的引用。

{this.props.BetSlipDataObj.betDetails.data.map(
  (value, index) => (
    <div className="d-flex justify-content-end" key={index}>
      <button
        className="info-button"
        data-toggle="collapse"
        href="#collapseExample"
        role="button"
        aria-expanded="false"
        aria-controls="collapseExample"
        onClick={
          value.betId != null
            ? () => _this.getBetIdDetails(value.betId)
            : value.childId != null
            ? () => _this.getBetIdDetails(value.childId)
            : () => {}
        }
      >
    </div>
  )
)}

您还缺少 div

上的 key 道具

编辑: 一个按钮打开所有框,因为它们都有相同的 ID 和控件。 要使 ID 和控件独一无二,您可以这样做:

{this.props.BetSlipDataObj.betDetails.data.map(
  (value, index) => (
    <div className="d-flex justify-content-end" key={index}>
      <button
        className="info-button"
        data-toggle={`collapse${index}`}
        href={`#collapseExample${index}`}
        role="button"
        aria-expanded="false"
        aria-controls={`collapseExample${index}`}
        onClick={
          value.betId != null
            ? () => _this.getBetIdDetails(value.betId)
            : value.childId != null
            ? () => _this.getBetIdDetails(value.childId)
            : () => {}
        }
      >
    </div>
  )
)}

你需要为每个 div 提供唯一的 id,可能是该行的主键,当单击该按钮时将 id 传递给打开函数,并将其附加到 div 打开。希望能帮助到你。这将是这样的:-

  onclick=handler(1)

div id 应该是这样的:- open1, open2 处理程序应该是这样的:-

handler(id) => idofelement+id open