Reactでreact-routerを使って画面遷移する際に、前のページのスクロール位置のままページが遷移されてしまう問題を解決する方法を紹介します。
なお、この記事で紹介するのはreact-router-domのバージョン6の場合です。
まず次のようなコンポーネントを作成します。
import { useEffect } from “react”;
import { useLocation } from “react-router-dom”;
import { useLocation } from “react-router-dom”;
function ScrollTop() {
const { pathname } = useLocation();
useEffect(() => {
window.scrollTo(0, 0);
}, [pathname]);
return null;
}
export default ScrollTop;
そして、react-routerでルーティング設定している部分で、Routerのすぐ下で先ほど作成したコンポーネントを読み込めばOKです。
function App() {
return (
<Router>
<ScrollToTop />
<Routes>
<Route exact path={ homeUrl } element={<Home />} />
<Route path={ homeUrl + “/about” } element={<About />} />
<Route path=”*” element={<NoMatch />} />
</Routes>
</Router>
);
}
return (
<Router>
<ScrollToTop />
<Routes>
<Route exact path={ homeUrl } element={<Home />} />
<Route path={ homeUrl + “/about” } element={<About />} />
<Route path=”*” element={<NoMatch />} />
</Routes>
</Router>
);
}
これで、画面遷移した時でもスクロール位置がページの最上部になると思います。
Leave a Comment