欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React路由跳轉的實現示例

 更新時間:2023年12月25日 10:01:08   作者:duansamve  
在React中,可以使用多種方法進行路由跳轉,本文主要介紹了React路由跳轉的實現示例,具有一定的參考價值,感興趣的可以了解一下

1. push 與 replace 模式

默認情況下,開啟的是 push 模式,也就是說,每次點擊跳轉,都會向棧中壓入一個新的地址,在點擊返回時,可以返回到上一個打開的地址,

就像上圖一樣,我們每次返回都會返回到上一次點擊的地址中

當我們在讀消息的時候,有時候我們可能會不喜歡這種繁瑣的跳轉,我們可以開啟 replace 模式,這種模式與 push 模式不同,它會將當前地址替換成點擊的地址,也就是替換了新的棧頂

我們只需要在需要開啟的鏈接上加上 replace 即可

<Link replace to={{ pathname: '/home/message/detail', state: { id: msgObj.id, title: msgObj.title } }}>{msgObj.title}</Link>

2. 編程式路由導航

我們可以采用綁定事件的方式實現路由的跳轉,我們在按鈕上綁定一個 onClick 事件,當事件觸發(fā)時,我們執(zhí)行一個回調 replaceShow

這個函數接收兩個參數,用來仿制默認的跳轉方式,第一個是點擊的 id 第二個是標題

我們在回調中,調用 this.props.location 對象下的 replace 方法

replaceShow = (id, title) => {
  this.props.history.replace(`/home/message/detail/${id}/${title}`)
}

同時我們可以借助 this.props.history 身上的 API 實現路由的跳轉,例如 go、goBack 、goForward

3. withRouter

當我們需要在頁面內部添加回退前進等按鈕時,由于這些組件我們一般通過一般組件的方式去編寫,因此我們會遇到一個問題,無法獲得 history 對象,這正是因為我們采用的是一般組件造成的。

只有路由組件才能獲取到 history 對象

因此我們需要如何解決這個問題呢

我們可以利用 react-router-dom 對象下的 withRouter 函數來對我們導出的 Header 組件進行包裝,這樣我們就能獲得一個擁有 history 對象的一般組件

我們需要對哪個組件包裝就在哪個組件下引入

// Header/index.jsx
import { withRouter } from 'react-router-dom'
// 在最后導出對象時,用 `withRouter` 函數對 index 進行包裝
export default withRouter(index);

這樣就能讓一般組件獲得路由組件所特有的 API

4. BrowserRouter 和 HashRouter 的區(qū)別

它們的底層實現原理不一樣

對于 BrowserRouter 來說它使用的是 React 為它封裝的 history API ,這里的 history 和瀏覽器中的 history 有所不同噢!通過操作這些 API 來實現路由的保存等操作,但是這些 API 是 H5 中提出的,因此不兼容 IE9 以下版本。

對于 HashRouter 而言,它實現的原理是通過 URL 的哈希值,但是這句話我不是很理解,用一個簡單的解釋就是

我們可以理解為是錨點跳轉,因為錨點跳轉會保存歷史記錄,從而讓 HashRouter 有了相關的前進后退操作,HashRouter 不會將 # 符號后面的內容請求。兼容性更好!

地址欄的表現形式不一樣

  • HashRouter 的路徑中包含 # ,例如 localhost:3000/#/demo/test

刷新后路由 state 參數改變

  • 在BrowserRouter 中,state 保存在history 對象中,刷新不會丟失
  • HashRouter 則刷新會丟失 state

到此這篇關于React 路由跳轉的實現示例的文章就介紹到這了,更多相關React 路由跳轉內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • React和Vue實現文件下載進度條

    React和Vue實現文件下載進度條

    本文主要介紹了React和Vue實現文件下載進度條,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • React Agent 自定義實現代碼

    React Agent 自定義實現代碼

    在使用langchain的ReactAgent遇到問題后,作者嘗試自定義ReactAgent實現,通過詳細分析langchain中的agent功能和問題,結合React思想,作者設計了新的agent邏輯并在GitHub上分享了代碼,新的ReactAgent通過改進prompt和工具調用邏輯,提升了任務執(zhí)行的效果和穩(wěn)定性
    2024-10-10
  • React?函數式組件和類式組件詳情

    React?函數式組件和類式組件詳情

    這篇文章主要介紹了React函數式組件和類式組件詳情,React是組件化的的JS庫,組件化也是React的核心思想,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • React中異步數據更新不及時問題及解決

    React中異步數據更新不及時問題及解決

    這篇文章主要介紹了React中異步數據更新不及時問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • react項目使用redux初始化方式

    react項目使用redux初始化方式

    這篇文章主要介紹了react項目使用redux初始化方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 聊聊jenkins部署vue/react項目的問題

    聊聊jenkins部署vue/react項目的問題

    本文給大家介紹了jenkins部署vue/react項目的問題,文末給大家提到了centOS安裝jenkins的腳本,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-02-02
  • react如何使用mobx6動態(tài)加載數據

    react如何使用mobx6動態(tài)加載數據

    MobX是一個強大而簡單的狀態(tài)管理工具,它可以幫助我們更好地組織和管理React應用程序中的數據流,本文給大家介紹react如何使用mobx6動態(tài)加載數據,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 基于useImperativeHandle的使用解析

    基于useImperativeHandle的使用解析

    這篇文章主要介紹了基于useImperativeHandle的使用解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React Native中實現動態(tài)導入的示例代碼

    React Native中實現動態(tài)導入的示例代碼

    隨著業(yè)務的發(fā)展,每一個 React Native 應用的代碼數量都在不斷增加。作為一個前端想到的方案自然就是動態(tài)導入(Dynamic import)了,本文介紹了React Native中實現動態(tài)導入的示例代碼,需要的可以參考一下
    2022-06-06
  • React使用ref進行訪問DOM元素或組件

    React使用ref進行訪問DOM元素或組件

    在 React 里,ref 就像是一個神奇的小助手,能讓你直接去訪問 DOM 元素或者組件實例,下面就跟隨小編一起來學習一下具體的使用方法吧
    2025-03-03

最新評論