这是一个有点奇怪的问题。我在React中处理事件类型,我们希望在某些示例中使用onClick,而在其他示例中使用onPointerDownCapture(出于某些原因)。但是为了使其更通用,它可以是任意两个不同的类似于点击的事件。问题是,尽管我们可以在表达式的右侧分配任何函数处理程序,但左侧本质上必须是静态的。因此,
〈按钮onClick={handler}
对比onPointerDownCapture={handler}
对比onMouseDown={handler}
/〉
我认为仅仅使用onPointerDownCapture对于大多数用例来说是可以的,但是在一个完美的世界里,我可以在运行时基于其他变量在这些变量之间切换。有没有可能覆盖按钮/div/上的onClick原型或者其他东西,使其成为我想要的任何事件类型?
搜索了很多。都没成功。
3条答案
按热度按时间qvtsj1bj1#
我不完全理解您所说的“覆盖onClick”是什么意思,但是
问题是,尽管我们可以在表达式的右侧分配任何函数处理程序,但左侧必须是静态的。
这是不正确的,左手边可能是动态的,下面是如何:
我想这解决了你的问题。
好吧,上面的语法有点简洁,而且确实令人困惑。这是一个很好的老JSX spread props语法,只是在一个内联对象文字上。
我会给予你另一个等价的形式,希望它应该更具可读性。
disbfnqx2#
必须使用这些属性名,并且对所有3个属性使用相同的函数名。
这3个属性的作用是注册相关事件。
也许您可以使用
useEffect
,并有条件地在其中添加一个事件侦听器,而不是建议的React属性。bsxbgnwa3#
我认为最好是在注解中使用@vera解决方案。将额外的prop传递给组件(例如isOnClick),并基于此将callback或undefined传递给事件处理程序prop:
注意,将undefined传递给prop与不设置该prop是一样的。
或者有条件地返回组件: