あるページから別のページに移動するとき、ユーザーが自動的に一番上にスクロールされるようにしたいと思います。つまり、scrollTo(0, 0)
です。
による react-router
スクロール復元に関するドキュメント 推奨されるアプローチは、コンポーネントScrollToTop
をセットアップし、この中にルートをラップすることです。
これはうまく機能し、ユーザーはScrollToTop
コンポーネント内にネストされたルートの一番上までスクロールされますが、コンポーネントがSwitch
コンポーネント内に配置されている場合、Switch
はそうではありません。もはやスイッチのように機能します。これは、最初のルートではなく、一致するすべてのルートをレンダリングすることを意味します。
または、ScrollToTop
をSwitch
の外側に配置しても、ユーザーが一番上にスクロールしなくなりました。
バージョン: react-router-v4
スクロールについて具体的にはわかりませんが、リスナーをbrowserHistory
にアタッチできます。これは、これを行う簡単な方法かもしれません(onUpdate
はv4では機能しないと思います)。
const browserHistory = createBrowserHistory();
browserHistory.listen((location, action) => {
window.scrollTo(0, 0);
});
<Router history={browserHistory} />
react-router-v4
scroll Restorationを使用し、ScrollToTopをSwitch
の外に配置することで、これを解決することができました。また、withRouter
を使用することを忘れないでください。そうしないと機能しません。
私がしたのと同じ問題がありました。が更新されるたびに、ユーザーはscrollTo(0,0)
に移動します。
<Router onUpdate={() => window.scrollTo(0, 0)} history={createBrowserHistory()}>
...
</Router
上記が機能しない場合:
Inreact-router-v4スクロール復元
これは、すべてのナビゲーションでウィンドウを上にスクロールするコンポーネントで処理するのは簡単です。ルーターの小道具にアクセスできるように、必ずルーターでラップしてください。
componentDidUpdate(prevProps) {
if (this.props.location !== prevProps.location) {
window.scrollTo(0, 0)
}
}
render() {
return this.props.children
}
}
次に、アプリの上部、ルーターの下にレンダリングします
const App = () => (
<Router>
<ScrollToTop>
<App/>
</ScrollToTop>
</Router>
)
上記のコードはReact-Routerからコピーされています ウェブガイド