Tim*_*Tim 2 javascript reactjs
我目前正在尝试在页面刷新时滚动到顶部。到目前为止,我已经能够在路线更改时实现滚动到顶部,但不能在页面刷新时实现 - 不知何故反应总是恢复其先前的位置。我怎样才能防止这种情况发生?
这就是我实现滚动到顶部的方式(认为window.scrollTo(0, 0)内部componenDidMount()会有所帮助,但它没有):
class ScrollToTop extends Component {
componentDidMount() {
window.scrollTo(0, 0);
}
componentDidUpdate(prevProps, prevState, snapshot) {
if (this.props.location.pathname !== prevProps.location.pathname) {
window.scrollTo(0, 0);
}
}
render() {
return null;
}
}
export default withRouter(ScrollToTop);
Run Code Online (Sandbox Code Playgroud)
class App extends Component {
render() {
return (
<BrowserRouter>
<ScrollToTop/>
<Header/>
<Home/>
<Projects/>
<div className="follow-cursor"/>
</BrowserRouter>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
你可以使用一些纯 JS:
window.onbeforeunload = function () {
window.scrollTo(0, 0);
}
Run Code Online (Sandbox Code Playgroud)
这将使页面在重新加载之前滚动到顶部,因此重新加载结束时一切都会好起来。
在 React-17.0.2 中实现滚动到顶部的自定义组件的另一种方法是使用钩子:
第1步:创建自定义组件: ScrollToTop.js
import { useEffect } from "react";
import { useLocation } from "react-router";
const ScrollToTop = (props) => {
const location = useLocation();
useEffect(() => {
if (!location.hash) {
window.scrollTo(0, 0);
}
}, [location]);
return <>{props.children}</>
};
export default ScrollToTop;
Run Code Online (Sandbox Code Playgroud)
步骤2:将ScrollToTop组件调用到Root中:
const App = () => {
return (
<>
<BrowserRouter>
<Router>
<ScrollToTop />
<Switch> ..... </Switch>
</Router>
</BrowserRouter>
</>
);
}
export default App;
Run Code Online (Sandbox Code Playgroud)
小智 5
在 App.js 中尝试此解决方案。这对我有用。
useEffect(() => {
window.history.scrollRestoration = 'manual'
}, []);
Run Code Online (Sandbox Code Playgroud)