You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React 17升级后document意外添加selectionchange事件的原因咨询

问题解答

该行为是否符合预期?

这是React 17的预期行为,并非异常情况。

事件添加的原因

  • React 17对文本选择、光标交互的内部处理逻辑进行了重构:为统一跨浏览器的文本选区管理,解决React 16中存在的部分兼容性问题,React内部会自动在document上绑定selectionchange事件监听器。
  • 这个监听器用于追踪全局文本选区的变化,配合React的合成事件系统,更精准地同步表单控件(如<input>、<textarea>)的输入状态与DOM选区状态,提升交互一致性。
  • React 16中没有这个全局监听器,是因为当时的选区逻辑绑定在具体元素上,存在监听器冗余和部分场景下的兼容性缺陷,React 17将这部分逻辑统一提升到document层优化了实现。

测试环境中的注意事项

在jest v27 + @testing-library/react v12的测试环境中,这个监听器的出现不会影响测试逻辑:

  • React会在组件卸载时自动移除该内部监听器,不会造成内存泄漏。
  • 如果你的测试需要手动监听selectionchange事件,只需关注自己添加的监听器即可,忽略React内部添加的实例即可。

内容的提问来源于stack exchange,提问作者Flora Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:12:03