Reputation: 915
I have three components C1, C2, C3 mapped on routes /c1
, /c2/
, /c3
.
I want to prevent component C3
from allowing (via browser event handling) going back to C2
and instead go directly to C1
.
How do I achieve this?
Upvotes: 3
Views: 7052
Reputation: 202856
This functionality is required because C2 acts as a "post-and-redirect". Imagine cases where browser performs a POST operation, and when you refresh the page it asks you if you want to resubmit the form. Well that's exactly my case.
In this case you can redirect in the flow to maintain the history stack you desire. In doing so then any back navigation (imperative/declarative from code or browser's back button) results in going back to the correct page you want the user to go back to.
Action | History Stack | Path | Back Location |
---|---|---|---|
initial | ["/"] |
"/" |
~ |
PUSH "/c1" | ["/", "/c1"] |
"/c2" |
"/" |
PUSH "/c1/c2" | ["/c1", "/c1/c2"] |
"/c1/c2" |
"/c1" |
REPLACE "/c1/c3" | ["/c1", "/c1/c3"] |
"/c1/c3" |
"/c1" |
POP (1) | ["/c1"] |
"/c1" |
~ |
To use imperative navigation in react-router-dom
:
v5 use the useHistory
hook
history.push
for normal navigationhistory.replace
for redirectinghistory.back
or `history.go(-1) to go back a pagev6 use the useNavigate
hook.
navigate(to)
for normal navigationnavigate(to, { replace: true })
for redirectingnavigate(-1)
to go back a pageUpvotes: 5