【发布时间】:2017-08-23 03:54:24
【问题描述】:
考虑这个组件:
<Card onClick={openWindowHandler}>
<Editable onDoubleClick={enableInputHandler} />
</Card>
我想要实现的是停止事件传播,仅当onDoubleClick事件被调度,所以openWindowHandler函数不被调用。但是,onClick 会在 onDoubleClick 之前触发!
我可以通过应用_.debounce函数来区分调用了哪个事件类型,但是那个时候事件已经派发了,所以没有办法调用stopPropagation()。
class App extends React.Component {
delayedCallback = _.debounce(function (event) {
if (event.type === 'dblclick') {
// too late to call event.stopPropagation()
} else {
// continue
}
}, 250)
handleClick = (event) => {
event.persist()
this.delayedCallback(event)
}
render () {
return (
<Card onClick={this.handleClick}>
<Editable onDoubleClick={this.handleClick} />
</Card>
)
}
}
有什么办法吗?
编辑:
对<Editable /> 元素的单击应向父母发出气泡,从而导致openWindowHandler 调用。
【问题讨论】:
-
您遇到了人体工程学问题:您的卡上应该有一个 onLongClick 道具。用户不会被您的单击或双击弄乱。
-
卡不是这里的问题。它可以是任何其他组件。问题是在另一个带有 onClick 事件的组件中带有 onDoubleClick 的 havig 组件。
应该能够以某种方式停止将事件传播给它的父母。 -
add on editable : onClick={(e) => {e.stopPropagation()}},有可能会影响onDoubleClick,但试试看:)。
-
我不能:(单击应该传播到它的父级,只有双击应该抑制传播。
标签: javascript reactjs events event-handling dom-events