Comments (3)
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.
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.
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)
- [Bug]: Incorrect Handling of Double-Encoded URL Parameters HOT 3
- [Bug]: useParams type always adds undefined HOT 4
- [Bug]: RouterProvider renders old state when the router is re-initialized HOT 1
- useNavigate can only be called inside a Router HOT 5
- [Bug]: Error no route matches URL / v6.22.1 with Create react app HOT 3
- [Bug]: isBrowser false when no document.createElement
- [Bug]: Uncaught (in promise) TypeError: subscriber is not a function HOT 4
- [Docs]: I want to contribute to making Korean documents. HOT 1
- [Bug]: I can't navigate to the /path directly HOT 2
- [Bug]: What's the updated way to navigate outside React Components? HOT 4
- [Bug]: route specific components are not rendering if the app is configured to run at different base path using a webmanifest file HOT 5
- [Bug]: Serious bug, If you repeat from the list page to the details page for many times, the page will freeze(real mobile phone)
- [Bug]: encType on Form does not include "application/json" HOT 1
- [Bug]: react-router-dom is showing a white page HOT 3
- [Bug]: Loader runs twice on page refresh and without using <StrictMode> HOT 2
- [Bug]: useSearchParams hook ignores search params if url ends with hash-link
- [Bug]: Memory leak when using `<Redirect />` in tests with jest + JSDOM HOT 1
- [Bug]: only '/' is working created by createBrowserRouter, other is 404 HOT 1
- [Bug]: when starting the application --- Module parse failed HOT 1
- [Bug]: useNavigate does not work in production HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-router.