似乎有一些混乱与什么使用超过其他:
<Link to='/some/path'>
<Redirect to='/some/path'/>
history.push('/some/path')
我使用React/Router已经有一段时间了,不同的帖子/答案在何时使用这些方面说了不同的事情,有时候它们与其他人所说的不一致。所以我想我需要澄清这一点。
根据我对Link
和这个documentation的理解:
在应用程序周围提供声明性的、可访问的导航。
根据我对Redirect
和这个documentation的理解:
将导航到新位置。新位置将覆盖历史堆栈中的当前位置,就像服务器端重定向(HTTP 3xx)一样。
似乎我读过的所有帖子几乎每个人都使用Redirect
来浏览应用程序,没有人推荐使用Link
,就像在这个post中一样。
现在history
可以做与Link
和Redirect
相同的事情,除了我有一个历史堆栈跟踪。
**问题1:**什么时候我想使用Link
和Redirect
,两者的用例是什么?
**问题2:**由于history
可以在应用内将用户路由到另一个位置,并增加了历史堆栈的额外奖励,那么在路由时是否应该始终使用历史对象?
**问题3:**如果我想将 * 路由到应用程序外部 *,最佳方法是什么?锚标签,Window.location.href,Redirect,Link,以上都不是吗?
1条答案
按热度按时间31moq8wy1#
首先,我真的建议阅读这个网站:
https://v5.reactrouter.com/web/api/Route
React Router的
BrowserRouter
为您维护历史堆栈,这意味着您很少需要手动修改它。但我想回答你的问题
**答案1:**您将希望在几乎所有用例中使用
Link
或NavLink
。Redirect
在特定情况下很有用,例如当用户试图访问未定义的路由时,会呈现404页面。Redirect
将用户从404路由重定向到您选择的新路由,然后用重定向的路由替换历史堆栈中的最后一个条目。这意味着用户将无法点击浏览器的后退按钮,并返回到404路由。
Link
NavLink
和Redirect
都使用路由器的history API,使用这些组件而不是手动历史意味着您可以安全地更改历史api。使用这些组件可以保证代码的未来性。答案2:
BrowserRouter
为你维护历史堆栈,一般我的意见是,你想远离手动更新它,你可以。**答案3:**以下是一些外部react链接的例子:
target='_blank'
将在新选项卡中打开链接,但请确保包含rel='noopener noreferrer'
以防止vulnerabilities