我刚刚将我的应用程序从Reaction RoutDOM v5迁移到了v6.
我注意到一个奇怪的地方.
我的应用程序的 struct 是这样的,用户在项目和子项目之间移动时会停留在同一个URL上(example.com/projects).更新状态以在保持URL不变的同时更改项目.
因此,例如,用户可能从projectA到projectB再到projectC,所有这些都停留在/projects的同一条路由上.
在v6之前,Link组件处理得很好,包括正确处理浏览器的后退按钮.
但在v6中,Link组件似乎有效地将不同的状态合并在一起.如果用户从/home开始,点击projectA,然后点击projectB,然后返回按钮,他们将返回到/home而不是projectA.
这 destruct 了我的应用程序.
幸运的是,我做了一个测试,使用useNavigate()的行为与预期的一样(edit:also.它似乎目前在我的应用程序中运行,但Sandbox 显示它不工作100%).
在短期内,我用useNavigate通过onClick事件替换了Link组件.但我宁愿使用Link组件.
我做错什么了吗?这是一个bug吗?
代码(FWIW):
state: { project: model.id }
<Link to={pathname} state={state}>
{children}
</Link>
编辑:
正如我所建议的,我创建了3个Sandbox .
对于每个Sandbox:
- 在主页上,导航到"项目A".
- 在项目页面中,单击"转到A"/"转到B"几次
- 单击浏览器后退按钮,直到它停止执行任何操作
预计
- 浏览器"倒回"点击,带你回到项目,最终返回主页
究竟发生了什么
- Sandbox 1作品
- Sandbox 2只返回一次,然后不会再前进了
- Sandbox 3将"倒带"通过项目,但不会回到主页
CodeSandbox 1(React 16/路由5.2/使用链接) Sandbox 1
CodeSandbox 2(React 18/路由6.22.3/使用链接)Sandbox 2
CodeSandbox 3(React 18/Router 6.22.3/使用useNavigate()代替链接)Sandbox 3