React compositionend 事件未触发问题
问题背景
采用 window
代理后,UiSearch
里输入中文拼音时存在问题,出现输入内容和实际内容对不上的问题。排查发现 React
的 onCompositionEnd
事件未触发,而 onCompositionStart
事件触发的 nativeEvent
是 keydown
事件,而非 compositionstart
事件。
问题原因
查看 React
源码发现,React
内部做了 CompositionEvent in window
的判断:如果支持 CompositionEvent
这个 API
, 那么就使用 composition
原生事件监听。否则,采用降级方案,也就是 keydown/up
等事件,从而导致触发的时机不对。
解决方案
解决方案为在使用沙箱代理 window
时,WindowProxy
对象的 has
方法中加入 key in window
的判断,让代理 window
也支持所有 window
原生支持的内容。