reactjs React-Router - Link vs Redirect vs History

a0zr77ik  于 2023-05-28  发布在  React
关注(0)|答案(1)|浏览(182)

似乎有一些混乱与什么使用超过其他:

  • <Link to='/some/path'>
  • <Redirect to='/some/path'/>
  • history.push('/some/path')

我使用React/Router已经有一段时间了,不同的帖子/答案在何时使用这些方面说了不同的事情,有时候它们与其他人所说的不一致。所以我想我需要澄清这一点。

根据我对Link和这个documentation的理解:

在应用程序周围提供声明性的、可访问的导航。

根据我对Redirect和这个documentation的理解:

将导航到新位置。新位置将覆盖历史堆栈中的当前位置,就像服务器端重定向(HTTP 3xx)一样。
似乎我读过的所有帖子几乎每个人都使用Redirect来浏览应用程序,没有人推荐使用Link,就像在这个post中一样。
现在history可以做与LinkRedirect相同的事情,除了我有一个历史堆栈跟踪。

**问题1:**什么时候我想使用LinkRedirect,两者的用例是什么?
**问题2:**由于history可以在应用内将用户路由到另一个位置,并增加了历史堆栈的额外奖励,那么在路由时是否应该始终使用历史对象?
**问题3:**如果我想将 * 路由到应用程序外部 *,最佳方法是什么?锚标签,Window.location.href,Redirect,Link,以上都不是吗?

31moq8wy

31moq8wy1#

首先,我真的建议阅读这个网站:
https://v5.reactrouter.com/web/api/Route
React Router的BrowserRouter为您维护历史堆栈,这意味着您很少需要手动修改它。
但我想回答你的问题

**答案1:**您将希望在几乎所有用例中使用LinkNavLinkRedirect在特定情况下很有用,例如当用户试图访问未定义的路由时,会呈现404页面。Redirect将用户从404路由重定向到您选择的新路由,然后用重定向的路由替换历史堆栈中的最后一个条目。

这意味着用户将无法点击浏览器的后退按钮,并返回到404路由。
LinkNavLinkRedirect都使用路由器的history API,使用这些组件而不是手动历史意味着您可以安全地更改历史api。使用这些组件可以保证代码的未来性。

答案2:BrowserRouter为你维护历史堆栈,一般我的意见是,你想远离手动更新它,你可以。
**答案3:**以下是一些外部react链接的例子:

<Route path='/external' component={() => window.location = 'https://external.com/path'}/>
<a href='https://external.com/path' target='_blank' rel='noopener noreferrer'>Regular Anchor tags work great</a>

target='_blank'将在新选项卡中打开链接,但请确保包含rel='noopener noreferrer'以防止vulnerabilities

相关问题