React新版本路由6.x 及路由懒加载

与老版本5.x对比

  1. 内置组件的变化:移除<Switch/> ,新增 <Routes/>
  2. 语法:component={组件} ==>  element={<组件/>}
  3. 新增hook:useParamsuseNavigateuseMatch

history和哈希的使用和5.x版本一样

<BrowserRouter>

<HashRouter>

import React from 'react';
import ReactDOM from 'react-dom/client'
import App from './App'
import { BrowserRouter } from 'react-router-dom'

const root = ReactDOM.createRoot(document.getElementById('root'))

root.render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
)

App.jsx 中

import React from 'react'
import { NavLink, Routes, Route } from 'react-router-dom'
import Page1 from './pages/Page1'
import Page2 from './pages/Page2'

export default function App() {
  return (
    <div>
            {/* 路由链接 */}
            <NavLink className="list-group-item" to="/Page1">Page1</NavLink>
            <NavLink className="list-group-item" to="/Page2">Page2</NavLink>
            {/* 注册路由 */}
            <Routes>
               <Route path='/Page1' element={<Page2/>} />
               <Route path='/Page2' element={<Page2/>} />
            </Routes>
    </div>
  )
}

<Switch>被移除,替代者:<Routes>
<Routes>和<Switch>一样,如果匹配上了,往下就不会再匹配了,相当于一个 if 语句,如果其路径与当前 URL 匹配,则呈现其对应的组件。
<Routes> 和 <Route>要配合使用,且必须要用<Routes>包裹<Route>。
<Route caseSensitive> 属性用于指定:匹配时是否区分大小写(默认为 false)。
当URL发生变化时,<Routes> 都会查看其所有子 <Route> 元素以找到最佳匹配并呈现组件 。
<Route> 也可以嵌套使用,且可配合useRoutes()配置 “路由表” ,但需要通过 <Outlet> 组件来渲染其子路由。

src/routes/index.js

export default [
  // 路由表
  {
    path: '/Page1 ',
    element: <Page1 />
  },
  {
    path: '/Page2',
    element: <Page2 />
  },
  {
    path: '/',
    element: <Navigate to='/Page2' />
  },
  {
    path: '/home',
    element: <Home />,
    children: [
      {
        path: 'news',
        element: <News />
      },
      {
        path: 'message',
        element: <Message />
      }
    ]
  },


]

App.jsx

import React from 'react'
import { useRoutes } from 'react-router-dom'
import routes from './routes/index';

export default function App() {
  
  const element = useRoutes(routes)
 
  return (
    <div>
         {element}
    </div>
  )
}


Home.jsx

import React from 'react'
import { NavLink, Outlet } from 'react-router-dom';

export default function Home() {
  return (
    <div>
      <div>
        <NavLink className="list-group-item" to="news">News</NavLink>
        <NavLink className="list-group-item" to="message">Message</NavLink>
        {/* 指定路由组件呈现的位置 */}
        <Outlet />
      </div>
    </div>
  )
}

在v5中,NavLink高亮使用组件标签中的activeClassName属性,当你点击NavLink标签时,加哪个样式的类名, 在v6版本中,想要实现自定义的类名,需要把className的值写成一个函数

再v6中使用路由懒加载 

import { lazy, Suspense } from "react";
const LazyTest = lazy(()=>import("../page/LazyTest"))
...
  {
    path: ' ',
    element: (
      <Suspense fallback={<h2>加载中....</h2>}>
        <LazyTest/>
      </Suspense>)
  },
 
...

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Argenta99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值