I have the following two paths set up
<Route path="bookings/:bookingnumber" element={<Bookings />} />
<Route path="bookings" element={<Bookings />} />
In Bookings component I have conditional code written to check if a parameter :bookingnumber is passed, and then it only shows results relevant to that booking number.
Otherwise, if no parameter is passed, it shows all the results for all the bookings.
I am using Outlet to display these components in the main area, and the two paths can be chosen from a sidebar.
Let's say I have 10 results if I go to /bookings, and 2 results if I go to /bookings/123.
However, if I go to /bookings/123 first and then to /bookings it keeps on showing only 2 results (the component does not reload, however I can see the URL changing in the browser)
<Route path="bookings" element={<Bookings />} />
<Route path="bookings/:bookingnumber" element={<Bookings />} />
With the same component rendered on more than 1 route, if you navigate from one route to another for the same routes component, the routed component remains mounted.
Example: If navigating from "/bookings" to "/bookings/123", or "/bookings/123" to "/bookings", or "/bookings/123" to "/bookings/456" the Bookings component remains mounted. If you've any logic that depends on the bookingnumber route path parameter then the Bookings component needs to handle this in a useEffect hook with a proper dependency on the bookingnumber param.
Use a useEffect hook to "listen" for changes to the bookingnumber param value.
Example:
const Bookings = () => {
const { bookingnumber } = useParams();
useEffect(() => {
// initial render or booking number value updated
// run logic depending on bookingnumber value to update "results"
...
}, [bookingnumber]);
...
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With