Events 如何管理react中复合输入组件的onBlur事件

Events 如何管理react中复合输入组件的onBlur事件,events,reactjs,onblur,Events,Reactjs,Onblur,我正在编写一个React组件(v0.14.7+),当光标离开组件时(通过选项卡、鼠标单击或触摸事件),该组件需要调用onBlur回调(通过道具传入) 挑战在于这个组件有两个输入标签。如果onBlur发生在第一个输入标记上,那么如果获得焦点的元素是第二个输入标记,我不应该调用onBlur处理程序。换言之,我应该只在焦点离开两个输入元素时触发onBlur 我正在寻找一个干净的解决方案来解决这个问题,它可以跨浏览器工作,理想情况下只使用React api/合成事件。也就是说,不看本地事件,除非我真的必

我正在编写一个React组件(v0.14.7+),当光标离开组件时(通过选项卡、鼠标单击或触摸事件),该组件需要调用onBlur回调(通过道具传入)

挑战在于这个组件有两个输入标签。如果onBlur发生在第一个输入标记上,那么如果获得焦点的元素是第二个输入标记,我不应该调用onBlur处理程序。换言之,我应该只在焦点离开两个输入元素时触发onBlur

我正在寻找一个干净的解决方案来解决这个问题,它可以跨浏览器工作,理想情况下只使用React api/合成事件。也就是说,不看本地事件,除非我真的必须看。我该怎么做


请注意,onFocus事件在onBlur事件之后触发,因此我不能仅通过跟踪哪个字段具有焦点来实现这一点。此外,onBlur事件触发时的document.activeElement似乎返回document对象,而不是活动元素。

我会使用timeout将
hasFocus的更改推迟一段时间。如果再次尝试更新hasFocus,请清除挂起的计划状态。卸载组件时不要忘记清除超时

参见工作示例。观察控制台,从第一秒输入对焦时,不会打印“真”和“假”


我试过了,但我再也没有反应事件了。。(在超时触发时,它已全部为空)。我认为这是由于反应池/回收事件造成的。我想将事件传递给onBlur处理程序。所以我的问题是如何创建一个React合成事件对象?关于React中的事件处理,您是对的。您可以持久化事件(防止它被React回收)。请参阅事件轮询部分中的注释。查找
event.persist()
查看更新的fiddle,其中我将接收到的
blur
事件的输入记录为最后一次