react-router-dom v6的路由懒加载形式,这里写了两种

软件定制,代码排错:小蓝阿姨的店铺


前言

在这里插入图片描述
react-router-dom第6版本的这个Route改动的有点小大
之前的路由渲染方式是按照

// v6版本之前的
<Route
	path={router.path}
	component = { router.component }
/>

在v6版本中,这个组件改动有点小大,把component这个属性改成了element,传进去的组件需要使用个尖括号包起来

// v6
<Route
	path={router.path}
	element = { <router.component /> }
/>

第一种

使用Suspense, lazy进行路由懒加载
我这边使用的是typescript,写法和js一样的,可以直接搬走
渲染出界面的地方

import React, { Suspense } from 'react'
import { Route, Routes } from 'react-router-dom'

import router from '@/router' 

class MyMain extends React.Component{
  render() {
    return (
      <main>
        <Routes>
          {
            router.map((item, i) => {
              return (
                <Route key={i} path={item.path} element={
                  <Suspense fallback={
                    <div>路由懒加载...</div>
                  }>
                    < item.component />
                  </Suspense>
                } />
              )
            })
          }
        </Routes>
      </main>
    )
  }
}

export default MyMain

路由表

import { lazy } from 'react'
// 如果你是js就直接无视这个interface的定义
interface Router {
  name?: string,
  path: string,
  children?: Array<Router>,
  component: any
}
// 如果你是js就直接无视这个: Array<Router>的类型限定
const router: Array<Router> = [
  {
    path: '/',
    component: lazy(() => import('@/views/home'))
  },
  {
    path: '/about',
    component: lazy(() => import('@/views/about'))
  }
]

export default router

在这里插入图片描述
在这里插入图片描述

第二种

使用react-loadable进行路由懒加载
需要安装依赖
yarn add react-loadable 或者 npm i react-loadable
如果你是typescript
你还需要额外安装一个依赖
yarn add @types/react-loadable 或者 npm i @types/react-loadable
我这边使用的是yarn
yarn add react-loadable @types/react-loadable

渲染出界面的地方

import React, { Suspense } from 'react'
import { Route, Routes } from 'react-router-dom'

import router from '@/router' 

class MyMain extends React.Component{
  render() {
    return (
      <main>
        <Routes>
          {
            router.map((item, i) => {
              return (
                <Route
                  key={i}
                  path={item.path}
                  element={ < item.component /> }
                />
              )
            })
          }
        </Routes>
      </main>
    )
  }
}

export default MyMain

路由表

import React from 'react'
import loadable from 'react-loadable' //引入这个loadable,使用这个来加载路由
// 如果你是js就直接无视这个interface的定义
interface Router {
  name?: string,
  path: string,
  children?: Array<Router>,
  component: any
}
const LoadingTip = () => <div>懒加载路由ing...</div>
// 如果你是js就直接无视这个: Array<Router>的类型限定
const router: Array<Router> = [
  {
    path: '/',
    component: loadable({
      loader: () => import('@/views/home'), // 需要异步加载的路由
      loading: LoadingTip // 这是一个的提示
    })
  },
  {
    path: '/about',
    component: loadable({
      loader: () => import('@/views/about'),
      loading: LoadingTip
    })
  }
]

export default router

在这里插入图片描述
在这里插入图片描述

结尾

有误的话欢迎指正,互相学习互相交流,路过的可以点个赞啥的吗

React Router v6 中,路由懒加载流程与 v5 有所不同。以下是实现路由懒加载的步骤: 1. 确保你已经安装了 `react-router-dom` 的版本为 6.x。 ```bash npm install react-router-dom@next ``` 2. 导入需要使用的组件和函数: ```jsx import React, { lazy, Suspense } from 'react'; import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'; ``` 3. 创建需要懒加载的组件: ```jsx const Home = lazy(() => import('./components/Home')); const About = lazy(() => import('./components/About')); const Contact = lazy(() => import('./components/Contact')); ``` 4. 使用懒加载的组件和路由: ```jsx function App() { return ( <Router> <Suspense fallback={<div>Loading...</div>}> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> <Route path="/contact" element={<Contact />} /> </Routes> </Suspense> </Router> ); } export default App; ``` 在上面的代码中,`Suspense` 组件用于在组件加载期间显示一个加载提示(例如 "Loading..."),直到组件加载完成。`fallback` 属性指定了加载期间显示的内容。 使用 `Routes` 组件来定义路由,而不是之前的 `Switch` 组件。 在每个 `Route` 组件中,使用 `element` 属性来指定要渲染的懒加载组件。 这样,当用户访问相应的路由时,对应的组件将会被动态加载并渲染。 请注意,v6 中还有其他一些变化,如路由路径匹配的语法和路由传参等。你可以查阅 React Router v6 的官方文档以获取更详细的信息。 希望这个例子对你有帮助!如果有任何问题,请随时向我提问。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小蓝阿姨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值