React路由跳轉(zhuǎn)的實(shí)現(xiàn)示例
1. push 與 replace 模式
默認(rèn)情況下,開(kāi)啟的是 push 模式,也就是說(shuō),每次點(diǎn)擊跳轉(zhuǎn),都會(huì)向棧中壓入一個(gè)新的地址,在點(diǎn)擊返回時(shí),可以返回到上一個(gè)打開(kāi)的地址,
就像上圖一樣,我們每次返回都會(huì)返回到上一次點(diǎn)擊的地址中
當(dāng)我們?cè)谧x消息的時(shí)候,有時(shí)候我們可能會(huì)不喜歡這種繁瑣的跳轉(zhuǎn),我們可以開(kāi)啟 replace 模式,這種模式與 push 模式不同,它會(huì)將當(dāng)前地址替換成點(diǎn)擊的地址,也就是替換了新的棧頂
我們只需要在需要開(kāi)啟的鏈接上加上 replace 即可
<Link replace to={{ pathname: '/home/message/detail', state: { id: msgObj.id, title: msgObj.title } }}>{msgObj.title}</Link>
2. 編程式路由導(dǎo)航
我們可以采用綁定事件的方式實(shí)現(xiàn)路由的跳轉(zhuǎn),我們?cè)诎粹o上綁定一個(gè) onClick 事件,當(dāng)事件觸發(fā)時(shí),我們執(zhí)行一個(gè)回調(diào) replaceShow
這個(gè)函數(shù)接收兩個(gè)參數(shù),用來(lái)仿制默認(rèn)的跳轉(zhuǎn)方式,第一個(gè)是點(diǎn)擊的 id 第二個(gè)是標(biāo)題
我們?cè)诨卣{(diào)中,調(diào)用 this.props.location 對(duì)象下的 replace 方法
replaceShow = (id, title) => { this.props.history.replace(`/home/message/detail/${id}/${title}`) }
同時(shí)我們可以借助 this.props.history 身上的 API 實(shí)現(xiàn)路由的跳轉(zhuǎn),例如 go、goBack 、goForward
3. withRouter
當(dāng)我們需要在頁(yè)面內(nèi)部添加回退前進(jìn)等按鈕時(shí),由于這些組件我們一般通過(guò)一般組件的方式去編寫(xiě),因此我們會(huì)遇到一個(gè)問(wèn)題,無(wú)法獲得 history 對(duì)象,這正是因?yàn)槲覀儾捎玫氖且话憬M件造成的。
只有路由組件才能獲取到 history 對(duì)象
因此我們需要如何解決這個(gè)問(wèn)題呢
我們可以利用 react-router-dom 對(duì)象下的 withRouter 函數(shù)來(lái)對(duì)我們導(dǎo)出的 Header 組件進(jìn)行包裝,這樣我們就能獲得一個(gè)擁有 history 對(duì)象的一般組件
我們需要對(duì)哪個(gè)組件包裝就在哪個(gè)組件下引入
// Header/index.jsx import { withRouter } from 'react-router-dom' // 在最后導(dǎo)出對(duì)象時(shí),用 `withRouter` 函數(shù)對(duì) index 進(jìn)行包裝 export default withRouter(index);
這樣就能讓一般組件獲得路由組件所特有的 API
4. BrowserRouter 和 HashRouter 的區(qū)別
它們的底層實(shí)現(xiàn)原理不一樣
對(duì)于 BrowserRouter 來(lái)說(shuō)它使用的是 React 為它封裝的 history API ,這里的 history 和瀏覽器中的 history 有所不同噢!通過(guò)操作這些 API 來(lái)實(shí)現(xiàn)路由的保存等操作,但是這些 API 是 H5 中提出的,因此不兼容 IE9 以下版本。
對(duì)于 HashRouter 而言,它實(shí)現(xiàn)的原理是通過(guò) URL 的哈希值,但是這句話我不是很理解,用一個(gè)簡(jiǎn)單的解釋就是
我們可以理解為是錨點(diǎn)跳轉(zhuǎn),因?yàn)殄^點(diǎn)跳轉(zhuǎn)會(huì)保存歷史記錄,從而讓 HashRouter 有了相關(guān)的前進(jìn)后退操作,HashRouter 不會(huì)將 # 符號(hào)后面的內(nèi)容請(qǐng)求。兼容性更好!
地址欄的表現(xiàn)形式不一樣
- HashRouter 的路徑中包含 # ,例如 localhost:3000/#/demo/test
刷新后路由 state 參數(shù)改變
- 在BrowserRouter 中,state 保存在history 對(duì)象中,刷新不會(huì)丟失
- HashRouter 則刷新會(huì)丟失 state
到此這篇關(guān)于React 路由跳轉(zhuǎn)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)React 路由跳轉(zhuǎn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- React進(jìn)行路由跳轉(zhuǎn)的方法匯總
- React 中常用的幾種路由跳轉(zhuǎn)方式小結(jié)
- react路由跳轉(zhuǎn)傳參刷新頁(yè)面后參數(shù)丟失的解決
- react中路由跳轉(zhuǎn)及傳參的實(shí)現(xiàn)
- React中的Hooks路由跳轉(zhuǎn)問(wèn)題
- React中的路由嵌套和手動(dòng)實(shí)現(xiàn)路由跳轉(zhuǎn)的方式詳解
- React-RouterV6+AntdV4實(shí)現(xiàn)Menu菜單路由跳轉(zhuǎn)的方法
- 基于React路由跳轉(zhuǎn)的幾種方式
- react-router v4如何使用history控制路由跳轉(zhuǎn)詳解
- react 路由跳轉(zhuǎn)的7種方式實(shí)現(xiàn)
相關(guān)文章
React和Vue實(shí)現(xiàn)文件下載進(jìn)度條
本文主要介紹了React和Vue實(shí)現(xiàn)文件下載進(jìn)度條,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04React Agent 自定義實(shí)現(xiàn)代碼
在使用langchain的ReactAgent遇到問(wèn)題后,作者嘗試自定義ReactAgent實(shí)現(xiàn),通過(guò)詳細(xì)分析langchain中的agent功能和問(wèn)題,結(jié)合React思想,作者設(shè)計(jì)了新的agent邏輯并在GitHub上分享了代碼,新的ReactAgent通過(guò)改進(jìn)prompt和工具調(diào)用邏輯,提升了任務(wù)執(zhí)行的效果和穩(wěn)定性2024-10-10React中異步數(shù)據(jù)更新不及時(shí)問(wèn)題及解決
這篇文章主要介紹了React中異步數(shù)據(jù)更新不及時(shí)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03聊聊jenkins部署vue/react項(xiàng)目的問(wèn)題
本文給大家介紹了jenkins部署vue/react項(xiàng)目的問(wèn)題,文末給大家提到了centOS安裝jenkins的腳本,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-02-02react如何使用mobx6動(dòng)態(tài)加載數(shù)據(jù)
MobX是一個(gè)強(qiáng)大而簡(jiǎn)單的狀態(tài)管理工具,它可以幫助我們更好地組織和管理React應(yīng)用程序中的數(shù)據(jù)流,本文給大家介紹react如何使用mobx6動(dòng)態(tài)加載數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧2024-02-02React Native中實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)入的示例代碼
隨著業(yè)務(wù)的發(fā)展,每一個(gè) React Native 應(yīng)用的代碼數(shù)量都在不斷增加。作為一個(gè)前端想到的方案自然就是動(dòng)態(tài)導(dǎo)入(Dynamic import)了,本文介紹了React Native中實(shí)現(xiàn)動(dòng)態(tài)導(dǎo)入的示例代碼,需要的可以參考一下2022-06-06React使用ref進(jìn)行訪問(wèn)DOM元素或組件
在 React 里,ref 就像是一個(gè)神奇的小助手,能讓你直接去訪問(wèn) DOM 元素或者組件實(shí)例,下面就跟隨小編一起來(lái)學(xué)習(xí)一下具體的使用方法吧2025-03-03