React useEventListener Hook:类型安全的 DOM 事件监听 (2026)这是一个「按 Esc 关闭弹窗」,它悄悄地做错了事:如果父组件传的是内联的 onClose={() => setOpen(false)}——而它几乎总是——那么 onClose 每次渲染都是一个新函数,于是这个 effect 会在父组件每一次渲染时都把监听拆掉再重新挂上。把 onClose 从依赖里删掉来止住这种抖动,你就换来了另一个 bug:监听器从此永远持有第一次渲染的 onClose,关闭弹窗调用的是一个过期闭包。