Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

React scroll to top on page refresh - don't restore position

I'm currently trying to scroll to top on page refresh. So far I've been able to implement scroll to top on route change, but not on page refresh - somehow react always restores its previous position. How can I prevent that from happening?

That's how I implemented scroll to top (thought window.scrollTo(0, 0) inside of componenDidMount() would help, but it didn't):

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);
class App extends Component {

    render() {
        return (
            <BrowserRouter>
                <ScrollToTop/>
                <Header/>
                <Home/>
                <Projects/>

                <div className="follow-cursor"/>
            </BrowserRouter>
        );
    }
}

export default App;
like image 486
Tom Avatar asked Mar 02 '23 16:03

Tom


1 Answers

EDIT

this answer is a better approach for this problem since its using react hooks instead of pure-js all over the place.

ORIGINAL

You can use some pure JS for that:

window.onbeforeunload = function () {
  window.scrollTo(0, 0);
}

This will make page scroll to top before it reloads, so everything will be fine when reload ends.

like image 139
StackedQ Avatar answered Mar 05 '23 15:03

StackedQ