我正在存储最新的输入数据值,以便在用户离开网页之前localStorage
。写入localStorage
是在window.onunload
上执行的。
useEffect(() => {
const updater = () => {
updateStorageValue('last_input', input);
};
window.addEventListener('unload', updater);
return () => window.removeEventListener('unload', updater);
}, [input]);
假设组件(使用此useEffect
的位置(是在用户关闭/刷新选项卡/窗口时挂载的。
我只是好奇,在整个网页停止工作时,删除unload
事件是否有任何影响。
React 在关闭/刷新页面时不会卸载应用程序组件。所以你的问题的答案是:不,它没有任何效果。
但是,如果它是存在于页面上的普通组件(而不是在退出之前安装(,那么清理函数应该在那里删除上一个unload
事件侦听器,然后再添加下一个。
您的useEffect
将删除unload
事件侦听器,并在input
更改时添加新的侦听器。但是,如果删除清理功能,则事件侦听器的数量将与input
更新一样多unload
事件侦听器。
例如,假设input
值按以下顺序更改:
'R'
'Re'
'Rea'
'Reac'
'React'
在这种情况下,将在unload
事件上调用这些函数:
updateStorageValue('last_input', 'R');
updateStorageValue('last_input', 'Re');
updateStorageValue('last_input', 'Rea');
updateStorageValue('last_input', 'Reac');
updateStorageValue('last_input', 'React');