账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    react-router 4.2 <Link to="/" >和 history.push('/') 两种导航到底区别在哪?
    53
    0

    这两种导航区别是什么?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 尐の潴猪 普通会员 1楼

      React Router 4.2和 history.push('/') 是两种用于在 React 应用程序中导航到不同 URL 的方法,但它们之间存在一些关键的区别。

      1. Link to=""/"
      2. Link to="/":这是最基础的导航方式,它的语法是在 <Router> 元素中使用,指定要导航到的 URL。当使用 Link 时,它的 to 属性会自动设置为 /,这意味着导航会跳转到根 URL。如果你想要从当前页面导航到根 URL,你可以在 <Link> 标签中直接设置 to="/",如下所示:

      jsx <Router> <Route path="/" exact component={Home} /> </Router>

      当用户点击这个链接时,他们将被路由到根 URL。如果你希望在 URL 中包含其他参数或 URL,你可以使用 Routeparamshistory 属性来实现。例如:

      jsx <Router> <Route path="/about" component={About} params={{ about: 'Some info about me' }} /> </Router>

      这里,about 参数将作为 params 属性的值添加到 about 组件的 URL,这样在访问 /about 时,URL 将是 about/Some info about me

      1. history.push('/')
      2. history.push('/'):这是在 HistoryRouter 类型中使用的导航方式,它会在当前页面上下文中直接跳转到根 URL。当你使用 history.push('/') 时,浏览器会自动发送一个 History.push() 的请求到服务器,而不是手动在 <Router> 元素中设置路由。这个请求的 URL 是当前页面的 URL 加上一个 ? 符号(?index),表示我们在导航到根 URL。

      jsx <Router> <History history={hashHistory}> <Route path="/" exact component={Home} /> </History> </Router>

      当用户点击这个链接时,浏览器会自动发送一个 History.push() 的请求到服务器,其中包含当前页面的 URL 和根 URL,如 ?index=Home。然后,服务器收到这个请求后会返回根 URL,如 /。浏览器解析这个 URL 并显示根 URL,从而在当前页面上下文中导航到根 URL。

      1. 应用场景与优缺点
      2. Link to=""/":主要适用于在当前页面中直接导航到根 URL,或者当 URL 包含参数时需要在 URL 中包含其他参数的情况。它的优点是简单易用,只需要在 <Router> 元素中指定 to="/" 就能实现导航,且浏览器会自动发送请求,无需手动在 <Link> 标签中设置路由。缺点是,如果你想要在 URL 中包含其他 URL,这可能会导致页面重定向到新的 URL,而不是根 URL。此外,如果 to="/" 是在历史导航时使用,那么每次浏览器重定向到根 URL,to="/" 的 URL 就会被重新设置,这可能会导致重复的 URL 跳转。

      3. history.push('/'):主要适用于在 HistoryRouter 类型中导航到根 URL,或者在需要在 URL 中包含其他 URL 的情况下。它的优点是不需要手动在 <Router> 元素中设置路由,只需要在 URL 中添加 ?index 符号即可实现导航。此外,由于浏览器自动发送请求,不会引起页面重定向到根 URL,也不会导致重复的 URL 跳转。缺点是,它的性能相对于 Link to=""/" 要差一些,因为浏览器需要手动发送请求,而且每次浏览器重定向到根 URL,?index 的 URL 就会被重新设置,这可能会导致额外的性能开销。

      综上所述,Link to=""/" 是最基础的导航方式,适合在当前页面中直接导航到根 URL 或 URL 包含参数时需要在 URL 中包含其他 URL 的情况下。而 history.push('/') 则适用于在 HistoryRouter 类型中导航到根 URL 或在需要在 URL 中包含其他 URL 的情况下,以及不需要手动在 <Router> 元素中设置路由,且不需要额外的性能开销。选择哪种导航方式,主要取决于你的具体需求和开发环境。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部