当前位置: 首页 > news >正文

React之路由

React之路由

背景: react: 18.2.0 路由:react-router-dom: 6.14.2

1、路由表配置

src下新建router/index.ts

import React, { lazy } from 'react'
import { Navigate } from 'react-router-dom'
import Layout from '@/layout/Index' 
import { JSX } from 'react/jsx-runtime'// 路由懒加载
const Home = lazy(() => import('@/views/Home'))
const About = lazy(() => import('@/views/About'))
const Error404 = lazy(() => import('@/views/Error/404'))// 封装加载异步组件
const withLoadingComponent = (comp: JSX.Element) => (<React.Suspense fallback={<div>loading</div>}>{comp}</React.Suspense>
)// 1 根据接口数据动态生成路由对象
// 2 根据路由对象 动态生成菜单列表
const routes = [{path: '/',element: <Navigate to="/home" />},{path: '/',element: <Layout />,children: [{path: '/home',element: withLoadingComponent(<Home />),meta: {title: '首页'}},{path: '/about',element: withLoadingComponent(<About />),meta: {title: '关于作者'}}]},// 用户随便输入一个未处理的路径,重定向到404{path: '*',element: withLoadingComponent(<Error404 />)}
]export default routes

注意:

  • 路由重定向需要使用 Navigate 组件对象,如: <Navigate to="/home" />
  • 路由懒加载需要使用react中的lazy 函数,如: lazy(() => import('@/views/Home')), 不过,所有懒加载的组件都必须被自定义加载loading高级组件包裹
// 自定义加载动画高级组件
const withLoadingComponent = (comp: JSX.Element) => (<React.Suspense fallback={<div>loading</div>}>{comp}</React.Suspense>
)
// 包裹懒加载组件
element: withLoadingComponent(<Home />),

2、在项目入口文件注入router

import ReactDOM from 'react-dom/client'
// UI css
// antd v5 自带的重置样式
import 'antd/dist/reset.css'
// 导入路由模式
import { BrowserRouter } from 'react-router-dom'
import App from './App.tsx'ReactDOM.createRoot(document.getElementById('root')!).render(<BrowserRouter><App /></BrowserRouter>
)

3、在跟组件App.tsx下面,使用useRoutes构建路由占位符

// 路由配置对象
import routes from './router' // .router/index.tsx
import { useRoutes } from 'react-router-dom'
function App() {// 模拟路由中的<Outlet /> 组件const outlet = useRoutes(routes)return <>{outlet}</>
}export default App

4、编程式路由导航

import { useNavigate } from 'react-router-dom'
const navigate = useNavigate()
navigate(‘路径’)

5、组件路由导航

import { Link } from 'react-router-dom'
<Link to={'路径'}>Back Home</Link>
http://www.lryc.cn/news/106542.html

相关文章:

  • 机器学习深度学习——非NVIDIA显卡怎么做深度学习(坑点排查)
  • 2021 Robocom 决赛 第四题
  • 线程池-手写线程池Linux C简单版本(生产者-消费者模型)
  • 05-向量的意义_n维欧式空间
  • 交通运输安全大数据分析解决方案
  • vimrc 配置 (持续跟新中)
  • 【集成学习介绍】
  • 动画制作选择Blender还是Maya
  • 215. 数组中的第K个最大元素
  • NLP From Scratch: 生成名称与字符级RNN
  • Spring MVC程序开发
  • 医疗知识图谱问答——文本分类解析
  • JS关于多张图片上传显示报错不影响后面图片上传方法
  • MySQL踩坑之sql_mode的用法
  • 消息队列总结(4)- RabbitMQ Kafka RocketMQ高性能方案
  • websocket服务端大报文发送连接自动断开分析
  • 想写几个上位机,是选择学c#还是 c++ qt呢?
  • JavaScript 简单实现观察者模式和发布-订阅模式
  • java集成短信服务 测试版 qq邮箱简单思路
  • #P0994. [NOIP2004普及组] 花生采摘
  • Elasticsearch和Kibana的安装及验证
  • 细讲TCP三次握手四次挥手(一)
  • 【linux-zabbix】zabbix-agent启动报错:Daemon never wrote its PID file. Failing.
  • 【微信小程序】初始化 wxCharts,调用updateData动态更新数据
  • 【C语言初阶(19)】实用的 VS 调试技巧
  • 虚拟机之间配置免密登录
  • 【contenteditable属性将元素改为可编辑状态】
  • Android 第三方库CalendarView
  • 钉钉群消息推送
  • css clip-path 属性介绍