过渡后 React Router 将页面滚动到顶部
React Router scroll page to the top after transition
在我的应用程序中,当我从一页切换到另一页时,页面将保持在与前一页相同的位置。我想在换页时让它到顶部。
react-router 文档有解决方法:https://reactrouter.com/web/guides/scroll-restoration
我在一个名为 ScrollToTop
的组件中实现了它,并用它包装了我的整个应用程序,但其中的所有内容都没有得到渲染。我不知道为什么。
滚动到顶部:
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;
}
应用程序:
import React from 'react';
import './App.css';
import Layout from './containers/Layout/Layout'
import MainPageConfig from './containers/MainPageConfig/MainPageConfig'
import ScrollToTop from './HOC/ScrollToTop'
import { BrowserRouter, Route, Switch } from 'react-router-dom'
function App() {
return (
<BrowserRouter >
<Layout>
<ScrollToTop>
<Switch>
<Route path="/" exact component={MainPageConfig} />
</Switch>
</ScrollToTop>
</Layout>
</BrowserRouter>
);
}
export default App;
我也试过这个post的建议:react-router scroll to top on every transition
在这两种情况下我得到相同的结果。
我该如何解决这个问题?
P.S。我也尝试将 ScrollToTop
放在 Layout
之外,但没有任何变化。
你能试试下面的吗
<BrowserRouter >
<Layout>
<ScrollToTop />
<Switch>
<Route path="/" exact component={MainPageConfig} />
</Switch>
</Layout>
</BrowserRouter>
import { useEffect } from "react";
import { useLocation } from "react-router-dom";
export default function ScrollToTop({children}) {
const { pathname } = useLocation();
useEffect(() => {
window.scrollTo(0, 0);
}, [pathname]);
return <>{children}</>;
}
只需 children 下树
在我的应用程序中,当我从一页切换到另一页时,页面将保持在与前一页相同的位置。我想在换页时让它到顶部。
react-router 文档有解决方法:https://reactrouter.com/web/guides/scroll-restoration
我在一个名为 ScrollToTop
的组件中实现了它,并用它包装了我的整个应用程序,但其中的所有内容都没有得到渲染。我不知道为什么。
滚动到顶部:
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;
}
应用程序:
import React from 'react';
import './App.css';
import Layout from './containers/Layout/Layout'
import MainPageConfig from './containers/MainPageConfig/MainPageConfig'
import ScrollToTop from './HOC/ScrollToTop'
import { BrowserRouter, Route, Switch } from 'react-router-dom'
function App() {
return (
<BrowserRouter >
<Layout>
<ScrollToTop>
<Switch>
<Route path="/" exact component={MainPageConfig} />
</Switch>
</ScrollToTop>
</Layout>
</BrowserRouter>
);
}
export default App;
我也试过这个post的建议:react-router scroll to top on every transition
在这两种情况下我得到相同的结果。
我该如何解决这个问题?
P.S。我也尝试将 ScrollToTop
放在 Layout
之外,但没有任何变化。
你能试试下面的吗
<BrowserRouter >
<Layout>
<ScrollToTop />
<Switch>
<Route path="/" exact component={MainPageConfig} />
</Switch>
</Layout>
</BrowserRouter>
import { useEffect } from "react";
import { useLocation } from "react-router-dom";
export default function ScrollToTop({children}) {
const { pathname } = useLocation();
useEffect(() => {
window.scrollTo(0, 0);
}, [pathname]);
return <>{children}</>;
}
只需 children 下树