在每次转换时,使react-router返回到顶部
在每次转换时,使react-router返回到顶部
当我跳转到另一个页面时,它的位置会保留在之前的页面上。所以它不会自动滚动到顶部。
我也尝试在onChange
路由器上使用window.scrollTo(0, 0)
。我还使用scrollBehavior
来解决这个问题,但它没有起作用。有关此问题有什么建议吗?
admin 更改状态以发布 2023年5月22日
React 16.8+
如果您在运行React 16.8或更高版本,使用一个组件来处理每次导航都将窗口滚动到顶部是很容易的:
这里是scrollToTop.js组件
import { useEffect } from "react"; import { useLocation } from "react-router-dom"; export default function ScrollToTop() { const { pathname } = useLocation(); useEffect(() => { window.scrollTo(0, 0); }, [pathname]); return null; }
然后将其渲染在您的应用程序顶部,但在Router的下方
这里是app.js中的示例
import ScrollToTop from "./scrollToTop"; function App() { return (); }
或者在index.js中
import ScrollToTop from "./scrollToTop"; ReactDOM.render(document.getElementById("root") );
但是类已经过时了
使用React Hooks实现的滚动到顶部
ScrollToTop.js
import { useEffect } from 'react'; import { withRouter } from 'react-router-dom'; function ScrollToTop({ history }) { useEffect(() => { const unlisten = history.listen(() => { window.scrollTo(0, 0); }); return () => { unlisten(); } }, []); return (null); } export default withRouter(ScrollToTop);
用法:
ScrollToTop也可以作为包装组件实现:
ScrollToTop.js
import React, { useEffect, Fragment } from 'react'; import { withRouter } from 'react-router-dom'; function ScrollToTop({ history, children }) { useEffect(() => { const unlisten = history.listen(() => { window.scrollTo(0, 0); }); return () => { unlisten(); } }, []); return{children} ; } export default withRouter(ScrollToTop);
用法: