本文主要是介绍react useEffect中removeEventListener没生效问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在useEffect中写入window.removeEventListener没有生效,代码如下
useEffect(() => {const handleResize = () => {console.log(window.innerWidth, window.innerHeight);};window.addEventListener('resize', handleResize);return () => {window.removeEventListener('resize', handleResize);};
}, [);
没生效原因:
在 removeEventListener 中所传递回的调函数需要与 addEventListener 中的保持一致,而在react中,因为视图更新所产生的更改,导致在return时所传递的函数是最新创建的函数,而不是在addEventListener中所传递的,简单来说就是react的更新机制所导致的引用问题。
解决方法:
使用useCallback来缓存一个函数,避免在每次渲染时重新创建这个函数。
也可以用useRef定义一个函数,确保函数在重新渲染是不被重新创建。
const handleResize = useCallback(() => {console.log(window.innerWidth, window.innerHeight);
}, []);useEffect(() => {window.addEventListener('resize', handleResize);return () => {window.removeEventListener('resize', handleResize);};
}, [);
这篇关于react useEffect中removeEventListener没生效问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!