每次URL改变时(包括页面重新加载),我需要滚动到页面顶部。
一切都有效,但我在使用浏览器的返回按钮时遇到了问题。即使路径名改变,页面也不会像应该的那样滚动到顶部,在所有其他情况下都正常工作(页面重新加载和常规链接导航)。
我尝试通过创建一个专门用于后退按钮的自定义钩子来解决这个问题,但它的行为不是我所期望的。我还尝试了许多其他方法,但好像没有任何方法能够处理浏览器返回按钮。
import { useEffect, useState } from "react";
import { useLocation } from "react-router-dom";
const ScrollToTop = () => {
const { pathname } = useLocation();
const useBackButton = () => {
const [isBack, setIsBack] = useState(false);
const handleEvent = () => {
setIsBack(true);
};
useEffect(() => {
window.addEventListener("popstate", handleEvent);
return () => window.removeEventListener("popstate", handleEvent);
});
return isBack;
};
const backButton = useBackButton();
console.log(backButton);
useEffect(() => {
window.scrollTo(0, 0);
}, [pathname, backButton]);
useEffect(() => {
window.onbeforeunload = () => {
window.scrollTo(0, 0);
};
}, []);
return null;
};
export default ScrollToTop;
onbeforeunload
,因为您实际上并没有离开该页面。像这样的东西可能很有用:使用react-router检测路由更改 - DBS