【发布时间】:2021-05-12 23:52:29
【问题描述】:
我在某个时候引入了一个错误(实时版本没有这个问题),但一直无法弄清楚是什么原因造成的。
我在 React 中有一个按钮(它只是一个 div 和一个 onClick)。
按钮具有onClick 和:hover CSS 效果。
通过单击另一个div(在第一次单击时有效)来加载该按钮。
加载按钮(及其包装内容)后,按钮在第一次单击时不会执行任何操作。不做任何其他事情,再次点击让它正常工作。
目前我的onClick 中有一条调试消息,所以它看起来像这样
onClick={(e) => {
console.log("ONclicked! " + this.props.alt);
// e.stopPropagation();
// various callbacks
}}>
我在所有按钮的父级上也有类似的console.log 调试消息,一直到根 React 元素(即单击页面上的任何位置都会发出一条消息,除非单击第一次在此特定按钮上)。即使是根元素也不会在第一次点击时注册任何内容..
这些消息都不会在第一次点击时出现。
同样,不做任何其他事情,只需在同一个位置再单击一次,就会按预期触发 onClick。
我看到的其他关于“第一次点击不起作用”的问题都是关于第一次点击时状态没有更新的问题。在我的情况下,我什至没有尝试更新状态,我似乎根本没有得到onClick 的调用。
我已经查看了这个版本的所有提交,但仍然无法找出问题所在。关于什么会导致这种行为的任何想法?对我来说最奇怪的部分是第二次点击有效,而第一次似乎没有做任何事情。但是在第一次和第二次点击之间,状态/DOM 没有任何变化(因为第一次点击似乎根本没有注册)。我认为这排除了诸如错误配置的pointer-events CSS 规则之类的事情?
编辑:
经过进一步探索,似乎第一次点击实际上触发了onMouseEnter,这看起来很疯狂,哈哈……但我在onMouseEnter 中添加了一个console.log,它肯定会在我第一次点击时触发,而不是在随后的点击中。
编辑 2:
但是这个 mouseEnter 事情只发生在 Firefox 中,而不是 Chrome。但是在两个浏览器中都存在第一次单击不起作用的错误。
编辑 3:
onMouseDown 正常触发,但onClick 仍然只在第二次单击按钮时发生(此时onMouseDown 触发了两次)。
另外,仔细检查并确认我没有在任何地方使用stopPropagation,这似乎是这个问题的常见来源。
【问题讨论】:
-
您能否在代码沙盒或类似工具中创建一个小型 repo 以重现您的行为?
-
自您发表评论以来一直在尝试,但无法重现。我想如果我能够重现它,我可能能够自己修复它,我敢肯定这只是干扰点击的一些小东西。现在会继续尝试,因为它也是调试的好方法。
-
还是没有重现,但是我测试了更多,发现第一次点击因为某种原因触发了
onMouseEnter...(后面的点击不会触发onMouseEnter)。跨度> -
另一个发现,
onMouseDown正在正确触发。如果需要,我想我可以切换到那个。此外,整个代码库中没有使用event.stopPropagatiion()。 -
如果没有向我们提供重现(您已经说过您目前还不能这样做)或围绕引用元素的完整代码,我们只能进行推测。我的猜测是,您在某个地方有另一个侦听器第一次拦截了该事件。
标签: javascript html css reactjs