You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router Dom v6.3.0路由导航滚动位置异常问题求助

React Router Dom v6.3.0 导航后页面从底部渲染的解决方法

问题原因

React Router v6 默认不会在导航至新页面时自动将浏览器滚动位置重置到顶部,所以当你在首页滚动到某个位置后跳转其他页面,目标页面会继承之前的滚动位置,从底部开始渲染。

解决方案

方法一:全局滚动恢复组件

创建一个监听路由变化的组件,每次路径切换时自动滚动到页面顶部:

import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';

const ScrollToTop = () => {
  const { pathname } = useLocation();

  useEffect(() => {
    // 滚动到页面顶部,可选添加平滑滚动效果
    window.scrollTo({
      top: 0,
      behavior: 'smooth'
    });
  }, [pathname]);

  return null;
};

export default ScrollToTop;

将这个组件添加到路由根组件(routes.tsx)的BrowserRouter内部即可:

const App: React.FC = () => (
  <BrowserRouter>
    <ScrollToTop /> {/* 新增全局滚动恢复组件 */}
    <Layout className="layout">
      <div style={{ marginBottom: "64px" }}>
        <Header>
          <AppHeader />
        </Header>
      </div>
      <Content>
        <div className="site-layout-content">
          <Routes>
            <Route path="/" element={<Home />} />
            <Route path="/offers" element={<Login />} />
            <Route path="/aboutUs" element={<AboutUs />} />
            <Route path="/contactUs" element={<ContactUs />} />
            <Route path="/placeDetails/:id" element={<PlaceDetails />} />
            <Route path="/advantages" element={<Advantages />} />
          </Routes>
        </div>
      </Content>
      <Footer style={{ textAlign: "center" }}>
        <AppFooter />
      </Footer>
    </Layout>
  </BrowserRouter>
);
export default App;

方法二:手动在导航时触发滚动(不推荐)

如果不想全局处理,也可以在每个navigate调用后手动添加滚动逻辑,但这种方式重复代码较多,仅适合特殊场景:

// header.tsx 中修改导航逻辑
<span onClick={() => {
  navigate("/offers");
  window.scrollTo(0, 0);
}}>{strings.header.offers}</span>

内容的提问来源于stack exchange,提问作者mera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:18:55