我有这个用例:一个页面在一个hashrouter下有两个子页面
例如
domain.com/post/1
domain.com/post/1#details
在#details 哈希路由中,我想听“后退按钮点击”并在页面关闭之前进行一次 api 调用以更新帖子。
在此期间想要显示一个微调器,然后在完成 api 调用后让浏览器完成 window.history.back(后退按钮逻辑)
这可能吗,怎么做?
我现在正在尝试并取得部分成功。我正在使用React
带有 NextJS 的框架,并且在一个组件中包含以下代码
useEffect(() => {
async function onPopState(e: PopStateEvent): Promise<void> {
return new Promise((resolve) => handleWantToClose(resolve));
}
window.addEventListener('popstate', onPopState);
return () => {
window.removeEventListener('popstate', onPopState);
};
});
在上面的代码片段handleWantToClose
中,单击返回导航浏览器按钮(或移动返回按钮 ios/android)时调用正常
问题是我不能延迟弹出状态。它不会等待承诺完成解决。
handleWantToClose
funcion 只是做一个 api 调用,然后调用 resolve 函数。
任何想法 ?这对于为移动用户提供出色的网站用户界面非常有用,尤其是那些back button
经常浏览网站的用户。
我尝试过的其他事情
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
在我的 popstatelistener 上,然后在 api 调用完成后,手动触发 window.history.back() 但没有工作。
popstate 事件是不可取消的。