我不知道这是否与您的案例相关,因为这是一个老问题,但我会将这个答案放在这里,因为我必须自己解决类似的问题。
在我自己的研究中,我找不到“history.stack
“对象,但也列出了一个解决方法here https://github.com/ReactTraining/react-router/issues/1496#issuecomment-119558014。基本上,你设置了一个goBack
作为位置状态传递到下一个路由的计数器。然后,无论计数器指示多少次,您都可以返回堆栈。
let goBack
if (history.location.state) {
goBack = history.location.state.goBack
} else {
goBack = -1
}
您可以在 React 中传递位置状态Link
s 通过替换to=
支撑一个物体。
<Link to={
{ pathname: "/next/path", state: { goBack: goBack - 1 } }
}> Click Here! </Link>
然后你只需调用history.go(history.location.state.goBack)
每当您需要前往入口路线时。
如果您可以在不点击条目的情况下输入已更改的路由之一(例如用户复制并粘贴指向单个图像的 URL),那么您可以添加默认行为。
if (history.location.state) {
history.go(history.location.state.goBack)
} else {
// You can add a default action if a user lands on route from an external link
history.push('/base/url')
}
如果您需要更复杂的行为,例如具有“检查点”路线,在您返回时跳过其间的任何路线,则此解决方案也可以工作。只是改变goBack
是一个数字列表(代表每次返回跳转之间的间隙),您可以在每次返回检查点时弹出该列表。
另一个可能让您感兴趣的解决方案是仅替换路由而不是将其推送到堆栈,但这需要编写一个包装的自定义组件Link
。你可以找到如何做到这一点here https://github.com/ReactTraining/react-router/issues/3776#issuecomment-270821438