最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue 項目遷移 React 路由部分經(jīng)驗分享

 更新時間:2022年09月16日 14:12:46   作者:ziolau  
這篇文章主要為大家介紹了Vue 項目遷移 React 路由部分經(jīng)驗分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

最近在把 Vue2.6 的老項目代碼遷移到 React,以便統(tǒng)一技術(shù)棧更好維護。 首先遇到的難點和思維模式上的轉(zhuǎn)變是:路由的遷移問題。Vue Router 遷移到 React Router,需要怎么支持嵌套的路由?

直觀感覺它們之間的異同:

Vue Router:

默認(rèn)使用字面量對象指定路由配置(children 屬性嵌套子路由配置);

視圖上使用 <router-view/> 嵌套渲染子路由.

React Router V5:

默認(rèn)使用JSX指定路由配置(也可以使用字面量對象渲染JSX達(dá)成);

視圖上使用嵌套 <Switch /> 渲染嵌套路由.

Tips: 渲染嵌套 JSX(同時傳遞props) 可以利用 <Route/> 支持 render 屬性的特性:

export function RouteWithSubRoutes(route: RoutesItem) {
  return (
    <Route
      path={route.path}
      render={(props) => (
        <route.component {...props} routes={route.routes} />
      )}
    />
  )
}

參考: v5.reactrouter.com/web/example…

然而,這樣一來,我們就比較難拿到當(dāng)前路由信息的 title(名稱) 信息。在 Vue 中我們可以使用 vm.$route 獲得, 在 React 可以使用 react-helmet:

export function RouteWithSubRoutes(route: RoutesItem) {
  return (
    <Route
      path={route.path}
      render={(props) => (
        <>
					{/** Helmet 支持嵌套,嵌套越深的匹配,優(yōu)先級越高 */}
          <Helmet>
            <title>{route.title}</title>
          </Helmet>
          <route.component {...props} routes={route.routes} />
        </>
      )}
    />
  )
}

可見 Vue Router 在處理嵌套路由方面,會比 React Router V5 較為便利(但是React Router更加靈活)。

升級到 React Router V6

React Router V6是個比較大的版本,在處理嵌套路由方面更加便利,它提供了一個接近 <router-view/> 功能的組件 <Outlet/>

簡單例子:

import { Routes, Route, Outlet } from "react-router-dom";
function App() {
  return (
    <Routes>
      <Route path="invoices" element={<Invoices />}>
        <Route path=":invoiceId" element={<Invoice />} />
        <Route path="sent" element={<SentInvoices />} />
      </Route>
    </Routes>
  );
}
function Invoices() {
  return (
    <div>
      <h1>Invoices</h1>
      <Outlet />
    </div>
  );
}
function Invoice() {
  let { invoiceId } = useParams();
  return <h1>Invoice {invoiceId}</h1>;
}
function SentInvoices() {
  return <h1>Sent Invoices</h1>;
}

當(dāng)然,v6 也提供了直接通過字面量對象的創(chuàng)建路由的方法 createHashRouter

let routeCreater
if (props.routerMode === RouterMode.History) {
  routeCreater = createBrowserRouter
} else {
  routeCreater = createHashRouter
}
const App = <RouterProvider router={routeCreater(routes, { basename })} />
ReactDom.render(App, document.querySelector('#app'))

修改業(yè)務(wù)代碼成:

const SignManagement = () => {
  return (
    <>
      <p>SignManagement</p>
      {/** Outlet 相當(dāng)于 Vue 的 <router-view /> */}
      <Outlet />          
    </>
  )
}
const SignApply = () => {
  return <p>SignApply</p>
}
export const routes: RouteObject[] = [
  {
    // title: '簽約管理',
    element: <SignManagement />,  // <---- component keyname變成了 element 
    path: '/guildSignConManage',
    errorElement: <p>error</p>,
    children: [
      {
        // title: '簽約申請',
        element: <SignApply />,
        path: 'signApply'
      }
    ]
  }
]

升級成功:

以上就是Vue 項目遷移 React 路由部分經(jīng)驗分享的詳細(xì)內(nèi)容,更多關(guān)于Vue項目遷移React路由的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue請求后端接口導(dǎo)出excel表格方式

    Vue請求后端接口導(dǎo)出excel表格方式

    這篇文章主要介紹了Vue請求后端接口導(dǎo)出excel表格方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue computed實現(xiàn)原理深入講解

    Vue computed實現(xiàn)原理深入講解

    computed又被稱作計算屬性,用于動態(tài)的根據(jù)某個值或某些值的變化,來產(chǎn)生對應(yīng)的變化,computed具有緩存性,當(dāng)無關(guān)值變化時,不會引起computed聲明值的變化。產(chǎn)生一個新的變量并掛載到vue實例上去
    2022-10-10
  • vue v-for 使用問題整理小結(jié)

    vue v-for 使用問題整理小結(jié)

    使用v-for指令的時候遇到一個錯誤問題,具體錯誤代碼在文章給大家列出,對vue v-for使用問題感興趣的朋友跟隨小編一起學(xué)習(xí)吧
    2019-08-08
  • Vue使用Element實現(xiàn)增刪改查+打包的步驟

    Vue使用Element實現(xiàn)增刪改查+打包的步驟

    這篇文章主要介紹了Vue使用Element實現(xiàn)增刪改查+打包的步驟,幫助大家更好的理解和學(xué)習(xí)vue框架,感興趣的朋友可以了解下
    2020-11-11
  • element el-tree組件的動態(tài)加載、新增、更新節(jié)點的實現(xiàn)

    element el-tree組件的動態(tài)加載、新增、更新節(jié)點的實現(xiàn)

    這篇文章主要介紹了element el-tree組件的動態(tài)加載、新增、更新節(jié)點的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Vue實現(xiàn)pdf在線預(yù)覽功能的示例代碼

    Vue實現(xiàn)pdf在線預(yù)覽功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用Vue實現(xiàn)pdf在線預(yù)覽功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Vue TypeScript使用eval函數(shù)遇到的問題

    Vue TypeScript使用eval函數(shù)遇到的問題

    近幾年前端對 TypeScript的呼聲越來越高,Typescript也成為了前端必備的技能。TypeScript是JS類型的超集,并支持了泛型、類型、命名空間、枚舉等特性,彌補了 JS 在大型應(yīng)用開發(fā)中的不足
    2023-01-01
  • vue的狀態(tài)管理模式vuex

    vue的狀態(tài)管理模式vuex

    本篇文章主要介紹了深入理解vue的狀態(tài)管理模式vuex,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 使用vue for時為什么要key【推薦】

    使用vue for時為什么要key【推薦】

    很多朋友不明白在使用vue for時為什么要key,key的作用有哪些,在文中給大家詳細(xì)介紹,需要的朋友可以參考下
    2019-07-07
  • Vue子組件內(nèi)的props對象參數(shù)配置方法

    Vue子組件內(nèi)的props對象參數(shù)配置方法

    這篇文章主要介紹了?Vue?子組件內(nèi)的??props?對象里的?default?參數(shù)是如何定義Array、?Object?、或?Function?默認(rèn)值的正確寫法說明,感興趣的朋友跟隨小編一起看看吧
    2022-08-08

最新評論

雷波县| 晋宁县| 大竹县| 太仓市| 铜川市| 通化县| 东丰县| 新郑市| 台江县| 台中市| 平塘县| 黔江区| 双江| 麻江县| 晋宁县| 兴隆县| 黔东| 阳泉市| 长沙县| 师宗县| 惠安县| 衡水市| 景洪市| 安康市| 苏州市| 武定县| 桦甸市| 都匀市| 阿荣旗| 文成县| 玉林市| 尖扎县| 绵阳市| 富阳市| 鹤庆县| 克山县| 内乡县| 峡江县| 西安市| 辛集市| 黔东|