Material UI IconButton onClick 不允许处理事件

Posted

技术标签:

【中文标题】Material UI IconButton onClick 不允许处理事件【英文标题】:Material UI IconButton onClick doesn't let to handle event 【发布时间】:2020-05-29 19:53:57 【问题描述】:

我安装了“@material-ui/core”:“^4.9.2”和“@material-ui/icons”:“^4.9.1”。

在我的表单中,我有几行,每行都有一个添加按钮和一个删除按钮。我希望删除按钮从中删除被单击的行。它适用于其中带有“-”字符的常规按钮。但我想要它花哨,所以我用 IconButton 替换了我的 Button,并导入了要使用的图标

import AddCircleOutline,RemoveCircleOutlineOutlined from "@material-ui/icons";

我的 IconButton 看起来像这样:

        <IconButton
          onClick=props.onRemoveClick
          className="align-self-center"
          color="info"
          size="sm"
          disabled=props.index > 0 ? false : true
          <RemoveCircleOutlineOutlined/>
        </IconButton>

点击 IconButton 时,会调用 onClick 方法(我知道是因为控制台中的日志),但我无法处理该事件,因为它现在未定义。

有趣的是,如果我单击与图标不对应的按钮区域,它会起作用。但显然我需要它在按钮的整个区域工作。

这不是绑定问题,因为我已经测试过了。

有什么想法吗?

【问题讨论】:

进一步的测试表明该事件不是未定义的,它确实被处理了。问题是它没有检索有效的 id (event.target.id),而是给了我空字符串“”。我需要按钮的 id 来识别要删除的行。 【参考方案1】:

文档中没有引用的props都继承到了它们内部的&lt;EnhancedButton /&gt;,所以你需要使用一个包装器。

      <IconButton
          onClick=(e) => props.onRemoveClick(e)
          className="align-self-center"
          color="info"
          size="sm"
          disabled=props.index > 0 ? false : true
          <RemoveCircleOutlineOutlined/>
        </IconButton>

【讨论】:

Thnaks,但它让事情变得更糟。现在,当我调用时,事件未在处理程序上定义:e.target.id 我得到“TypeError: Cannot read property 'target' of undefined” 如果您需要访问事件传递事件对象。这是标准方式,如果您需要事件对象,您只需添加一个参数,它也适用于所有其他方法(编辑答案),无论哪种方式,如果对您有帮助,请接受答案。【参考方案2】:

嗯,你给出了一个想法。因为我需要一个索引来识别行的按钮,所以我通过 onClick 方法上的参数发送索引,如下所示:

onClick=e => props.onRemoveClick(props.index)

这样我就不需要处理事件了。我还必须在构造函数上绑定我的方法:

constructor(props) super(props); this.handleRemoveClick = this.handleRemoveClick.bind(this);

现在我得到了想要的行为

【讨论】:

【参考方案3】:

你可以看到github ussue here。打字稿定义文件存在一些问题,但我们可以解决它。

解决方案

我尝试像在 github 问题中一样解决它,但没有奏效。所以这对我有用。

const onClick = (e: any) => 
    // e is of type any so the compiler won't yell at you


<IconButton onClick=(e) => onClick(e)>

【讨论】:

以上是关于Material UI IconButton onClick 不允许处理事件的主要内容,如果未能解决你的问题,请参考以下文章

按下时如何更改 IconButton 的图标

改变material-ui按钮的字体大小,并让按钮缩放?

@material-ui 与 material-ui 之间的区别(无符号)

Material-Ui 和 Material-Ui-Next 的区别

material-ui 'createSvgIcon' 不是从 '@material-ui/core/utils' 导出的

Material-UI 无法解析 '@material-ui/core/styles/createMuiTheme