如果有人在React-JS中遇到这个问题,
假设你有一个useEffect(),想要在每次重新渲染或(前进/后退)时记录popState。
useEffect(() => {
function handlePopStateEvent(e) {
console.log(e);
console.log("Check if the function Working")
}
console.log("Check if Effect Working")
window.addEventListener("popstate", handlePopStateEvent);
return () => window.removeEventListener("popstate", handlePopStateEvent);
}, []);
你需要使用history.pushState()手动添加一些历史记录,即使你手动输入了一些URL路径,比如说你在URL中输入了以下路径:
http://localhost:5173/lab
http://localhost:5173/home
http://localhost:5173/blog
http://localhost:5173/about
这样是行不通的,popState()事件不会记录任何内容,如果你尝试手动调用函数来查看日志,你会得到undefined。
解决方法是,在控制台中添加一些历史记录,像这样:
history.pushState({}, '', '/home');
history.pushState({}, '', '/blog');
history.pushState({}, '', '/about');
history.pushState({}, '', '/lab');
然后当你在浏览器中使用后退/前进箭头或者Alt + (← →)时,popState()将会在控制台中记录如下内容。
在每个“后退/前进”操作中。
为了更好地理解这种行为,您可以查看MDN上关于History API、popState和history.push()的内容。
以下是MDN的描述:
Window接口的popstate事件在用户浏览会话历史时,当活动历史记录条目发生更改时触发。它将当前历史记录条目更改为用户最后访问的页面的历史记录条目,或者如果使用history.pushState()向历史记录堆栈添加了历史记录条目,则使用该历史记录条目。
链接:
https://developer.mozilla.org/en-US/docs/Web/API/Window/popstate_event