Reactjs 反应:防止右键单击聚焦其他可聚焦元素

Reactjs 反应:防止右键单击聚焦其他可聚焦元素,reactjs,focus,dom-events,Reactjs,Focus,Dom Events,我知道这看起来很简单,第一反应是在mousedown事件中建议类似于preventDefault。这不是问题所在 在React中,我只想有一个输入,当左键单击时正常接收焦点,当右键单击时不接收焦点 我找不到任何事件处理程序或事件操纵的组合可以实现这一点(至少在chrome中)。我很想把事件处理程序放在React DOM之外,在React介入之前在捕获阶段对高层禁用进行外科手术,但我只是希望我遗漏了一些东西,有人可以看到我遗漏了一些明显的东西 这里是我对它抛出的“一切”的各种组合。合成事件标准预防

我知道这看起来很简单,第一反应是在mousedown事件中建议类似于
preventDefault
。这不是问题所在

在React中,我只想有一个
输入
,当
左键单击时
正常接收焦点,当
右键单击时
不接收焦点

我找不到任何事件处理程序或事件操纵的组合可以实现这一点(至少在chrome中)。我很想把事件处理程序放在React DOM之外,在React介入之前在捕获阶段对高层禁用进行外科手术,但我只是希望我遗漏了一些东西,有人可以看到我遗漏了一些明显的东西

这里是我对它抛出的“一切”的各种组合。合成事件标准预防、nativeEvent预防、捕获和气泡阶段的每种变化等。使用下面的所有事件处理程序,我可以防止左键单击设置焦点,但仍可以右键单击设置输入的焦点

//React v16.12.0
function killEvent (e: React.SomeEvent<HTMLInputElement>): void {
    e.nativeEvent.stopImmediatePropagation();
    e.nativeEvent.preventDefault();
    //[Neither above nor below seems to work]
    e.preventDefault();
    e.stopPropagation();
}

<input
    onContextMenuCapture={killEvent}
    onContextMenu={killEvent}
    onClick={killEvent}
    onClickCapture={killEvent}
    onAuxClick={killEvent}
    onAuxClickCapture={killEvent}
    onPointerDown={killEvent}
    onPointerDownCapture={killEvent}
    onMouseDownCapture={killEvent}
    onMouseDown={killEvent}
    onFocusCapture={killEvent}
    onFocus={killEvent}
/>
//React v16.12.0
函数killEvent(e:React.SomeEvent):void{
e、 nativeEvent.stopImmediatePropagation();
e、 nativeEvent.preventDefault();
//[上面和下面似乎都不起作用]
e、 预防默认值();
e、 停止传播();
}
这是我的解决方案

鼠标按下时捕捉

 <input onMouseDown={this.killEvent} />

为了更好地理解这种情况,你能给我举个例子说明这种用法吗?因为现在我还不能完全理解它。我认为示例的使用对于其他人理解这个工具非常有用。集中注意力。右键单击同一个对象,防止其获得焦点。好的,您可以使用“oncontextmenu”事件捕获右键单击,然后其余部分应该是直接向前的,您可以在我的问题中看到,我有oncontextmenu吗?停止传播和防止上下文菜单事件中的默认值(同时引用本机和合成事件)不会阻止焦点。您是否理解react合成事件系统?是的,我知道,很抱歉,我错过了正在使用的oncontextmenu,我在local中使用了相同的内容,我明白您的意思,但是使用阻止事件右键单击会阻止浏览器右键单击显示,仅在使用e.nativeEvent.preventDefault()时有效,问题是在右键单击时禁用该字段,所以为什么不使用e.target.disabled=true;然后在右键单击或类似操作时为false,因为正如我所说的,阻止默认值的工作方式与假定的killEvent=e=>{e.nativeEvent.preventDefault();e.target.disabled=true;};反对票的选民应该给出反对票背后的理由!!不是downvoter,而是提问者已经尝试了
evt.nativeEvent.preventDefault()
,您刚刚提出了建议,但是在一个条件中。
 killEvent = e => {
    if (e.nativeEvent.which === 3) {
      e.nativeEvent.preventDefault();
    }
  };