我想在用户导航到另一个页面之前将一些数据存储在本地存储中。我已经尝试使用useBeforeUnload,但它不起作用。
useBeforeUnload(
useCallback(() => {
localStorage.setItem(`formCreation${id}${revisionNo}`, formData);
}, [])
);
我还尝试在卸载前使用window.addEventListener,但由于它是一个使用react路由器的单页应用程序,即使用户路由到另一个页面,它也不会将数据存储在本地存储中。
window.addEventListener('beforeunload', function (event)
我能做些什么来解决这个问题?
2条答案
按热度按时间fhity93d1#
beforeunload
事件,即当浏览器窗口/选项卡关闭或用户完全导航到另一个外部URL时,与简单卸载React组件不同,即当单击链接时,React应用程序导航到内部路由路径。如果你想在组件被渲染的路径被导航离开时捕获一些值并保存到localStorage,那么在组件卸载时使用
useEffect
钩子的cleanup函数来执行。由于你只想让这个效果运行一次,你可能需要将这个逻辑与另一个useEffect
钩子和一个React ref耦合起来,以缓存一个你想在组件卸载时持久化的值。如果你想涵盖组件卸载***和浏览器上下文被关闭/卸载的两种情况,那么将上述情况与
beforeunload
事件侦听器结合起来。示例:
unftdfkk2#