刷新页面时如何清除React Hook?

5

我有一个使用React Hooks构建的应用程序,当关闭时需要通知服务器。我尝试使用以下方法实现:

function onUnload() {

        if (roomID !== "")
            endGame(roomID, dispatch);
    }

    useEffect(() => {
        return onUnload;
    },[])

这里,endGame是一个执行向后端发起HTTP请求的函数。但是,在刷新页面以模拟用户关闭应用程序时,该请求从未到达服务器,这意味着清理函数不会被执行。有什么想法是错的吗?
提前感谢。
1个回答

6

刷新页面并不等同于组件卸载。当您刷新页面时,React状态将被重置,因为React仅在当前客户端会话上工作,而刷新相当于重置它。您可能正在寻找的是onunload事件。请尝试此操作:

window.onbeforeunload = function(e) {
  return onUnload();
};

我已经尝试过使用window.addEventListener('beforeunload',()=>{...}),但它没有起作用。直接使用setter有什么不同吗? - Adrian Pascu
@AdrianPascu 看起来你返回的是函数对象,而不是执行卸载操作。 - Moot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接