This是我在沙箱里做的测试.

如果您运行代码并像这样单击两个按钮:First、Back、First、Back...有几次,您会在控制台上看到目标事件的名称属性变成了空,即使我第一次按下该按钮时它不是空的.

我还附上了一张图片,右下角有一些 comments ,以澄清这种行为.

代码是这样的:

  handleSearchChange(event) {
    const target = event.target;
    const name = target.getAttribute("name");
    console.log("Test name " + name + "\n");
  }
  render() {
    return (
      <div>
        <div style={{ height: "30px", width: "30px" }}>
          <FirstSVG name="first_page" onClick={this.handleSearchChange} />
        </div>
        <div style={{ height: "30px", width: "30px" }}>
          <BackSVG name="back_page" onClick={this.handleSearchChange} />
        </div>
      </div>
    );
  }

enter image description here

推荐答案

只有当<svg>元素是点击的最里面的项时,它才会成为目标.例如,如果您点击SVG的第<path>部分,它将成为目标.

虽然您可以使用event.currentTarget来修复它-它将引用侦听器附加到的元素,而不是事件被分派到的元素-但由于这是Reaction,一个更好的方法是根本不通过DOM传递信息,而是仅通过JavaScript传递信息.

例如,您可以拥有类似以下内容:

  makeHandler(name) {
    return () => {
      console.log(name);
    };
  }
  render() {
    return (
      <div>
        <div style={{ height: "30px", width: "30px" }}>
          <FirstSVG onClick={makeHandler("first_page")} />
        </div>
        <div style={{ height: "30px", width: "30px" }}>
          <BackSVG onClick={makeHandler("back_page")} />
        </div>
      </div>
    );
  }

Reactjs相关问答推荐

无法在jest中发布行动

try 在Dockerfile中使用AWS CLI将React构建工件上传到S3时出错

在Next.js中实现动态更改的服务器组件

Google Firestore无法读取图像-react

React-React中是否完全支持基于类的组件?

svg每条路径上的波浪动画

在迭代状态时无法读取未定义的属性(读取 map )

MUI 日期 Select 器 - 最小日期混乱

onClick 事件处理程序未应用于样式组件

如果我使用 formik,如何在嵌套对象中写入正确的值?

强制 useEffect 仅运行一次

Reactjs:MUI5:MobileDateTimePicker API:如何自定义日历中的文本

Next.js 和理智 | npm run build 时预渲染页面/时发生错误

React设置上下文并进行导航

在 redux 中分派到另一个减少时状态值不会改变

如何在 MUI 数据网格中的 renderCell 组件之间传递状态

组件焦点上的 MUI 更改栏 colored颜色

MUI 卡组件上的文本未正确对齐

React如何在用户登录后等待当前用户数据被获取

您无权使用阻止 webRequest 侦听器.请务必在 list 中声明 webRequestBlocking 权限