跳到主要内容

react hook 如何判断当前用户是否离开当前页面

要在React中判断用户是否离开当前页面,你可以使用useEffect钩子和beforeunload事件来实现。

首先,你需要在组件中定义一个状态,用于表示用户是否离开当前页面:

import React, { useEffect, useState } from 'react';

const MyComponent = () => {
const [isPageVisible, setPageVisible] = useState(true);

useEffect(() => {
const handleVisibilityChange = () => {
setPageVisible(!document.hidden);
};

document.addEventListener('visibilitychange', handleVisibilityChange);

return () => {
document.removeEventListener('visibilitychange', handleVisibilityChange);
};
}, []);

useEffect(() => {
const handleBeforeUnload = (event) => {
event.preventDefault();
return event.returnValue = '确定要离开吗?';
};

window.addEventListener('beforeunload', handleBeforeUnload);

return () => {
window.removeEventListener('beforeunload', handleBeforeUnload);
};
}, []);

return (
<div>
{isPageVisible ? '当前页面可见' : '当前页面不可见'}
</div>
);
};

export default MyComponent;

上面的代码中,我们使用了两个useEffect钩子。第一个钩子用于监听页面的可见性变化,当页面由可见变为不可见或由不可见变为可见时,更新isPageVisible状态。

第二个钩子用于监听页面关闭或刷新事件。当用户试图离开当前页面时,会触发beforeunload事件。我们在这个钩子中添加了一个事件监听器,当事件触发时,阻止默认行为,并返回一个字符串,以激活浏览器的关闭确认提示。

最后,在组件的返回值中,根据isPageVisible的值显示相应的内容。

这样,你就可以在React中判断用户是否离开当前页面了。请注意,浏览器可能对beforeunload事件的使用进行限制,以提供更好的用户体验和安全性保护。这意味着上述代码在某些情况下可能不会触发beforeunload事件。