gpt4 book ai didi

javascript - addEventListener 在 useEffect Hook 中不起作用

转载 作者:行者123 更新时间:2023-12-05 08:40:02 27 4
gpt4 key购买 nike

以下是一个组件,其部分功能是在页面变得聚焦和模糊时更改窗口的标题。它不起作用。

const ATitleChangingComponent = () => {

const focusFunction = (event: FocusEvent) => {
document.title = "focused";
};
const blurFunction = (event: FocusEvent) => {
document.title = "blurred";
};


useEffect(() => {
window.addEventListener("focus", focusFunction);
return window.removeEventListener("focus", focusFunction);
}, []);

useEffect(() => {
window.addEventListener("blur", blurFunction);
return window.removeEventListener("blur", blurFunction);
}, []);

return <p>some unimportant jsx</p>
};

但是,

const focusFunction = (event: FocusEvent) => {
document.title = "focused";
};
window.addEventListener("focus", focusFunction);

工作得很好。

附带问题:const focusFunctionconst blurFunction 是否在每次渲染的函数中构建?我假设如果是这样,它们应该从组件中移除以避免不必要的开销?

最佳答案

需要返回一个函数,否则监听器会被立即移除。

组件卸载时调用该函数

useEffect(() => {
window.addEventListener("blur", blurFunction);
return () => window.removeEventListener("blur", blurFunction);
}, []);

关于javascript - addEventListener 在 useEffect Hook 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57261912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com