MutationObserver 监听 DOM 变化的几个真实坑:从弹窗自动聚焦到 React 组件卸载
在做一个后台管理系统的表单弹窗时,我用 ref 拿到输入框并在弹窗打开后调用 focus(),在本地跑得好好的,结果测试同事点了“新增用户”后光标并没有落在第一个输入框上。排查后发现弹窗内容是通过 v-if 渲染的,nextTick 那一刻 DOM 已经挂载,但有些第三方组件内部又用 v-show 切换了一层 wrapper,输入框实际在下一帧才可见,Chrome 会拒绝给不可见元素聚焦。这种场景下用 setTimeout 猜时间很不体面,MutationObserver 更合适,它能直接在 DOM 结构或属性变化时收到回调。不过这个 API 容易踩坑:回调异步批量触发、childList 和...