
[英]clearInterval does not get called inside React.useEffect hook
[英]React.useEffect does not cleanup
我有一个用于检测外部点击的自定义反应钩子。
function useOutsideClick(ref, onOutsideClick) {
useEffect(() => {
const onClick = event => {
if (!ref.current?.contains?.(event.target)) {
onOutsideClick(event);
}
}
console.log('mounted');
document.addEventListener('click', onClick);
return () => {
document.removeEventListener('click', onClick);
console.log('unmounted');
}
}, [onOutsideClick])
}
这是我在控制台中看到的。
mounted
mounted
unmounted
mounted
unmounted
...
结果,我有两个事件侦听器而不是一个,因为其中一个没有清理。 我究竟做错了什么?
好吧,那是我的错。 一切正常。 问题是我在页面的根目录中有另一个组件,仅在离开时才会卸载。 所以,output 是
mounted
mounted
unmounted
mounted
unmounted
...
unmounted
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.