最近,我一直在将Material Design Lite集成到我的 React Web 应用程序中。在大多数情况下,一切都很好,但目前我在 React 的事件处理方面遇到了一些问题,这似乎与某些 MDL 组件不兼容。
特别是,我有一个带有onClick
处理程序的 DOM 元素,它工作得非常好,直到添加了 MDL 工具提示,这导致onClick
不再触发。我已经尝试了几乎所有可能的变体(将工具提示放在 DOM 中的其他位置,将onClick
处理程序附加到一个容器 div,该容器 div 具有作为子项的工具提示等),但我似乎无法让它工作。
这是一个演示该问题的 JSBin(我还包含了一个示例,该示例使用 jQuery 在组件安装后将点击处理程序绑定到元素,这实际上确实有效):
http://jsbin.com/sewimi/3/edit?js,输出
我有一些关于为什么这不起作用的理论,但我对 React 或 MDL 的了解都不够,无法验证其中的任何一个。
我相信这与 React 处理事件的方式有关,并且由于某种原因,MDL 似乎与它发生冲突。从文档中:
React 实际上并没有将事件处理程序附加到节点本身。当 React 启动时,它开始使用单个事件侦听器在顶层侦听所有事件。安装或卸载组件时,只需从内部映射中添加或删除事件处理程序。当一个事件发生时,React 知道如何使用这个映射来调度它。当映射中没有事件处理程序时,React 的事件处理程序是简单的无操作
这使得看起来 MDL 可能会弄乱 React 的内部事件映射,这导致我对元素的单击变成了无操作。但同样,这只是一个完整的猜测。
有人对此有任何想法吗?我宁愿不必componentDidMount
为每个使用 MDL 工具提示的组件手动绑定事件侦听器(就像我在我提供的示例 JSBin 中所做的那样),但这就是我现在要使用的解决方案。
另外,由于我不确定这是否是特定于 MDL 的错误,所以我选择在这里而不是在他们的问题页面上发布这个问题。如果有人认为我也应该在那里发布它,请告诉我,我可以做到。
谢谢!