[英]react-router-dom: go back twice in history on go back event
我在路由/c1
、 /c2/
、 /c3
上映射了三个组件C1、C2、C3 。
我想阻止组件C3
允许(通过浏览器事件处理)返回C2
,而是直接返回 go 到C1
。
我如何实现这一目标?
此功能是必需的,因为 C2 充当“post-and-redirect”。 想象一下浏览器执行 POST 操作的情况,当您刷新页面时,它会询问您是否要重新提交表单。 嗯,这正是我的情况。
在这种情况下,您可以在流程中重定向以维护您想要的历史堆栈。 这样做之后,任何返回导航(来自代码或浏览器的返回按钮的命令式/声明式)都会导致返回到您希望用户返回到 go 的正确页面。
行动 | 历史堆栈 | 小路 | 返回位置 |
---|---|---|---|
最初的 | ["/"] |
"/" |
~ |
推“/c1” | ["/", "/c1"] |
"/c2" |
"/" |
推“/c1/c2” | ["/c1", "/c1/c2"] |
"/c1/c2" |
"/c1" |
替换“/c1/c3” | ["/c1", "/c1/c3"] |
"/c1/c3" |
"/c1" |
流行音乐 (1) | ["/c1"] |
"/c1" |
~ |
要在react-router-dom
中使用命令式导航:
v5 使用useHistory
钩子
history.push
进行正常导航history.replace
进行重定向history.back
或 `history.go(-1) 到 go 返回一个页面 v6 使用useNavigate
挂钩。
navigate(to)
进行正常导航navigate(to, { replace: true })
进行重定向navigate(-1)
到 go 返回一个页面
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.