GithubHelp home page GithubHelp logo

Comments (3)

brophdawg11 avatar brophdawg11 commented on April 27, 2024

Scroll management is not available when using BrowserRouter - you would need to handle that via your own effects.

We released a ScrollRestoration component in 6.4 that you can use with a Data Router/RouterProvider that solves this: https://stackblitz.com/edit/react-ts-ug6gbd?file=App.tsx

You shouldn't need to use JavaScript to take your user to the hashed location on another page.

This is a bit confusing to me since you've already opted into JS being a requirement with the SPA architecture? If you were rendering your HTML on the server, then the reloadDocument suggestion would work as expected. It doesn't only because the anchor indicated by the hash does not exist on page load.

from react-router.

rebeccapeltz avatar rebeccapeltz commented on April 27, 2024

reloadDocument does work on the Home page, where the anchor is located. Are you saying that if I had pre-rendered the About page, that this would work?
I appreciate the clarification that we need to write our own JavaScript for this cross-page scroll-to-hash functionality. I was concerned that I was not correctly implementing the react-router package.

from react-router.

brophdawg11 avatar brophdawg11 commented on April 27, 2024

Yep! reloadDocument basically turns your link into a normal <a href> that react router doesn't touch (no onClick listener, no e.preventDefault(), no client side routing) so it will be a document HTTP request to your server for a fresh HTML page. Browser's built-in hash-routing operates on the initial HTML returned from the server - and if it doesn't find an id matching the hash in that HTML then it doesn't do any scrolling. So if the HTML returned from the server for GET /about had the midpoint ID in it then it would work as expected.

My recommendation would be to migrate to a data router if possible and then ScrollRestoration should solve your problem.

If you can't migrate at the moment, you may be able to adapt the code in https://github.com/epicweb-dev/restore-scroll (which is loosely based on ScrollRestoration and adapted to work for any element with scrolling) and remove the useNavigation logic since there is no "navigation " concept in BrowserRouter and my hunch ois that you can get pretty close to getting a working <ScrollRestoration> for BrowserRouter

from react-router.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.