はじめに
React Routerでページ遷移を行う際、前画面でスクロールした状態が残ってしまいます。
遷移後のページを最上部から表示させるために、window.scrollTo(0, 0)
を利用します。
実装
useLocation
とuseEffect
を利用し、パス名が変わったときにwindow.scrollTo(0, 0)
が実行されるようにします。
const ScrollToTop = () => {
const { pathname } = useLocation()
useEffect(() => {
window.scrollTo(0, 0)
}, [pathname])
return null
}
作成したScrollToTop
をRouter
でラップします。
これでComponentOne
ComponentTwo
ComponentThree
のどこに遷移しても、ページ最上部から表示されるようになります。
<Router>
<ScrollToTop />
<Switch>
<Route path={'/one'}>
<ComponentOne />
</Route>
<Route path={'/two'}>
<ComponentTwo />
</Route>
<Route path={'/three'}>
<ComponentThree />
</Route>
</Router>