如何点击ReactJS包装元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何点击ReactJS包装元素?相关的知识,希望对你有一定的参考价值。

当我单击一个包装元素时,我希望在该包装元素上触发一个函数。相反,它似乎触发了最内在的元素。

在下面的例子中,点击“yo”记录undefined;点击“yo”和“lip”之间的空格记录1;并点击“嘴唇”记录undefined

我希望所有3都记录1

import React from 'react';

export default class Foo extends React.Component {
  something = e => {
    e.stopPropagation()
    console.log(e.target.dataset.index)
  }

  render() {
    return (
      <section data-index={1} onClick={this.something} ref={e => { this.section = e }}>
        <h1 style={{ marginBottom: 30 }}>yo</h1>
        <p>lip</p>
      </section>
    )
  }
}

CodeSandbox Demo

答案

您将使用e.currentTarget而不是e.target获得所需的行为。

docs for e.currentTarget state

当事件遍历DOM时,标识事件的当前目标。它总是引用事件处理程序附加到的元素,而不是event.target,它标识事件发生的元素。

这是a fork of your codesandbox using e.currentTarget

import React from 'react';

export default class Foo extends React.Component {
  something = e => {
    e.stopPropagation()
    console.log(e.currentTarget.dataset.index)
  }

  render() {
    return (
      <section data-index={1} onClick={this.something} ref={e => { this.section = e }}>
        <h1 style={{ marginBottom: 30 }}>yo</h1>
        <p>lip</p>
      </section>
    )
  }
}
另一答案
import React from 'react';

export default class Foo extends React.Component {
  something = e => {
    e.stopPropagation()
    //console.log(e.target.dataset.index)
    console.log(e.currentTarget.dataset.index)
  }

  render() {
    return (
      <section data-index={1} onClick={this.something} ref={e => { this.section = e }}>
        <h1 style={{ marginBottom: 30 }}>yo</h1>
        <p>lip</p>
      </section>
    )
  }
}

以上是关于如何点击ReactJS包装元素?的主要内容,如果未能解决你的问题,请参考以下文章

ReactJs:如何创建一个包装器组件,该组件在单击时会执行某些代码并呈现子组件?

ReactJs - 如何将 ApolloProvider 包装在 StatsigProvider 中?

ReactJS:如何将 knockoutJS 页面包装在 React 组件中

如何在 react-router 中为 Link 或 IndexLink 的包装元素设置 activeClassName?

ReactJS - 在为新行输入数据时,如何将单元格文本包装在 MaterialTable 中?

如何组合绑定片段而不将它们包装在 XML 文字中