【发布时间】:2020-12-31 02:07:25
【问题描述】:
所以我想了解在 React 中编写这个事件监听器有什么问题?我注意到其他人将它包装在 useEffect 钩子中并添加了一个 removeEventlistener,但我不明白这一点,因为它与我的代码做同样的事情。
这是我的代码
function App() {
const hideMenu = () => {
if (window.innerWidth > 768) {
setIsOpen(false);
}
};
window.addEventListener('resize', hideMenu);
}
将此代码放入 useEffect 挂钩有什么意义?为什么我不能只使用上面的代码就可以了?
这是放在 useEffect 挂钩中的相同代码
useEffect(() => {
const hideMenu = () => {
if (window.innerWidth > 768) {
setIsOpen(false);
}
};
window.addEventListener('resize', hideMenu);
}, []);
根据我的网站,这两种方法的作用完全相同,那么我如何在控制台中检查执行 useEffect 的目的与我编写它的方式?
如果屏幕大于 768px,我的功能就是隐藏移动菜单。
【问题讨论】:
-
在没有钩子的版本中,只要您的状态发生变化,您就会添加多个事件侦听器。在带有钩子的版本中,您只需在组件挂载时添加一次事件侦听器
-
我是否需要添加一个返回并移除事件监听器?
-
从哪里返回?您应该只添加一次事件侦听器(就像您使用 useEffect 所做的那样),不断删除它并添加一个新侦听器并不是很有资源。
-
下面的答案使用return,这就是我看到网上大家提到的事件监听器和react
标签: reactjs addeventlistener use-effect