如何获取被点击的按钮的 id?ReactJS

IT技术 javascript reactjs
2021-04-03 02:43:23

我想知道如何获取被点击的按钮的 id(因为它是未知的)。所以当按钮被点击时,我知道那个特定按钮的 id 是什么。页面上有很多按钮,我想知道按下了哪个按钮(它们都有唯一的 ID)。目前按钮看起来像这样:

  <button key={uuidv4()} id={this.props.keyword} value={this.props.keyword} onClick={this.props.onClick} className="removeButton">Remove</button>
6个回答

好吧,如果元素是嵌套的,event.target则并不总是有效,因为它首先指的是触发事件的目标。请参阅此链接以了解 的用法event.currentTarget,它始终指的是处理程序绑定到的元素。

另一种获取元素及其属性的方法是使用React refs当尝试在 React 中获取 DOM 元素时,这更通用。

您可以使用event.target.id来获取单击的按钮的 ID

class App extends React.Component {
  constructor(props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
  }
  handleClick(event) {
    const id = event.target.id;
    console.log(id);
  }
  render() {
    return (
      <button id="unique-id" onClick={this.handleClick}>Button</button>
    );
  }
}
ReactDOM.render(<App />, document.getElementById("root"));
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="root"></div>

询问是因为我收到TypeError: Cannot read property 'target' of undefined错误
2021-05-23 02:43:23
如果单击处理程序和按钮元素位于不同的组件中,这看起来会有所不同吗?
2021-05-28 02:43:23
@Dseasterevent.target.innerText会让你知道
2021-06-07 02:43:23
@dorkycam 不,如果它们是两个组件,则不会产生影响,出现错误是因为您event在函数路径的某处缺少参数
2021-06-09 02:43:23
知道了,我再试试
2021-06-10 02:43:23

我知道这已经得到了回答,但我正在使用 react 并面临类似的问题,花了 2 个小时试图弄清楚为什么 event.target.id 有时为 null 或空字符串

这为我解决了:

class Button extends React.Component {

    getButtonId = (e) => {
      console.log(e.currentTarget.id);
    }

    render() {
       return (
          <button id="yourID" onClick={this.getButtonId}>Button</button>
       );
    }
}

执行此操作的非常方便的方法(不仅适用于按钮,还适用于元素列表)是使用data-someNameDOM 元素的自定义属性,然后通过event.currentTarget.dataset.someName

const openCard = (event) => {
  console.log('event.currentTarget.dataset.id', event.currentTarget.dataset.id); // >> id
  //do more actions with id
};

<Card onClick={openCard} data-id={item.id}>
  <CardContent />
</Card>;

`

您可以使用 event.target.[selector go here] 或 event.currentTarget.[selector go here] 来解决您的问题。请参阅下面的示例代码。

class Button extends React.Component {

  handleId = (e) => {
    console.log(e.target.id);
    console.log(e.currentTarget.id);
  }

  render() {
    return (
      <button id="yourID" onClick={this.handleId}>Button</button>
    );
  }
}