javascript - ClickAwayListener 在嵌套组件中禁用 onClick

标签 javascript reactjs material-ui

我遇到了一个问题,即 clickAwayListener material-ui 组件在我的嵌套组件上的一个按钮中禁用了 onClick 事件。

当我删除 ClickAwayListener 时一切正常,但当它存在时它会禁用 onClick。

目前handle delete函数是删除页面的指定区域。

需要注意的是,DeleteArea组件是一个位于对话框中的对话框。它会询问用户是否确定要删除指定区域。

handleClear 也在改变状态,我认为这与它有关,因为我尝试将它更改为控制台日志,并且在未调用 handleClear 时它可以正常工作。

<ClickAwayListener onClickAway={handleClear}>
  <CustomForm />
</ClickAwayListener>


in CustomForm:
<...>
  <DeleteArea onClick={handleDelete()}>
</...>

我想要完成的是让用户能够点击离开,同时让删除按钮正常工作。

最佳答案

我刚遇到同样的事情。似乎 onClickAway 处理程序在其子级的 onClick 处理程序之前被调用。

在我的例子中,点击会改变状态,这样它的一些 child 就不会被渲染。 onClick 损坏的 child 就是其中之一,并在 react 门户中呈现,因此 onClickAway 在单击此 child 时被触发。这意味着在触发其 onClick 处理程序时,子项将不再呈现。

我不喜欢这种解决方法,但是将 onClickAway 处理程序包装在 setTimeout (0ms) 中为我解决了这个问题。

一个例子:

<ClickAwayListener onClickAway={() => setTimeout(onDelete)}>
...

我知道这个问题有点老了,我不确定它是否能解决您的问题,但我认为它可能会帮助遇到此问题的人。

关于javascript - ClickAwayListener 在嵌套组件中禁用 onClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57894097/

相关文章:

javascript - HapiJS JSON 格式化

javascript - 需要帮助使用 jquery 搜索 XML 文件并将结果存储在变量中供以后使用

reactjs - 从 AppBar LeftIcon 切换抽屉

node.js - 不变违规 : Element type is invalid: expected a string (for built-in components) or a class/function. react 路由器 v4

reactjs - 使卡片(或纸张)不占据全宽 Material UI

reactjs - 如何从钩子(Hook) react 组件中获取 TextField(Material-UI) 值?

reactjs - Material UI - 背景在其子项上触发 onClick

javascript - 如何从javascript中的对象获取特定的键值?

Swift 或 iOS 中等效的 Javascript ArrayBuffer

javascript - 解析嵌套的 javascript 数组