React-router?v6在Class組件和非組件代碼中的正確使用
最近內(nèi)部正在開發(fā)的 react 項(xiàng)目 react-router
全線升級到了 v6 版本
v6 版本中很多 API 進(jìn)行了重構(gòu)變更,導(dǎo)致很多舊寫法失效
下面記錄一下 history
模塊在 v6 中的用法
在封裝的request等非組件代碼中如何使用 history 進(jìn)行路由?
1. history路由用法
將 createBrowserHistory()
創(chuàng)建的 history
與新的 unstable_HistoryRouter
API進(jìn)行上下文綁定
注意:
在 v6 版本中如果不對上下文進(jìn)行綁定直接使用 createBrowserHistory()
創(chuàng)建的 history
進(jìn)行編程式路由操作
將出現(xiàn)路由變化 UI 不變化的問題,hash
和 history
模式同理。
import { createBrowserHistory } from 'history'; import { unstable_HistoryRouter as HistoryRouter } from 'react-router-dom'; let history = createBrowserHistory(); function App() { return ( <HistoryRouter history={history}> // The rest of your app </HistoryRouter> ); } history.push("/foo");
2. hash路由用法
import HashHistory from 'history/hash'; import { unstable_HistoryRouter as HistoryRouter } from 'react-router-dom'; function App() { return ( <HistoryRouter history={HashHistory}> // The rest of your app </HistoryRouter> ); } history.push("/foo");
項(xiàng)目升級了v6版本,怎么兼容舊的Class組件?
使用新的 hooks API封裝高階組件包裹 class 組件進(jìn)行 props 的傳遞
import { useLocation, useNavigate, useParams, } from "react-router-dom"; function withRouter(Component) { function ComponentWithRouterProp(props) { let location = useLocation(); let navigate = useNavigate(); let params = useParams(); return ( <Component {...props} router={{ location, navigate, params }} /> ); } return ComponentWithRouterProp; } // class components @withRouter() class YouClassComponent extends React.Component {} export default YouClassComponent // or class YouClassComponent extends React.Component {} export default withRouter(YouClassComponent)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
React路由參數(shù)傳遞與嵌套路由的實(shí)現(xiàn)詳細(xì)講解
這篇文章主要介紹了React路由參數(shù)傳遞與嵌套路由的實(shí)現(xiàn),嵌套路由原則是可以無限嵌套,但是必須要讓使用二級路由的一級路由匹配到,否則不顯示,需要的朋友可以參考一下2022-09-09React中使用async validator進(jìn)行表單驗(yàn)證的實(shí)例代碼
react上進(jìn)行表單驗(yàn)證是很繁瑣的,在這里使用async-validator處理起來就變的很方便了,接下來通過本文給大家介紹React中使用async validator進(jìn)行表單驗(yàn)證的方法,需要的朋友可以參考下2018-08-08詳解create-react-app 2.0版本如何啟用裝飾器語法
這篇文章主要介紹了詳解create-react-app 2.0版本如何啟用裝飾器語法,cra2.0時(shí)代如何啟用裝飾器語法呢? 我們依舊采用的是react-app-rewired, 通過劫持webpack cofig對象, 達(dá)到修改的目的2018-10-10從零開始搭建webpack+react開發(fā)環(huán)境的詳細(xì)步驟
這篇文章主要介紹了從零開始搭建webpack+react開發(fā)環(huán)境的詳細(xì)步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05React中Ant?Design組件日期編輯回顯的實(shí)現(xiàn)
本文主要介紹了React中Ant?Design組件日期編輯回顯的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04React+EggJs實(shí)現(xiàn)斷點(diǎn)續(xù)傳的示例代碼
這篇文章主要介紹了React+EggJs實(shí)現(xiàn)斷點(diǎn)續(xù)傳的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07React class和function的區(qū)別小結(jié)
Class組件和Function組件是React中創(chuàng)建組件的兩種主要方式,本文主要介紹了React class和function的區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10用React實(shí)現(xiàn)一個(gè)類 chatGPT 的交互式問答組件的方法詳解
這篇文章主要給大家詳細(xì)介紹如何用React實(shí)現(xiàn)一個(gè)類 chatGPT 的交互式問答組件的方法,文中有詳細(xì)的代碼示例,對我們學(xué)習(xí)有一定的幫助,需要的朋友可以參考下2023-06-06