react 19版中路由react-router-dom v7版的使用

news/2025/3/5 8:37:47/
  1. 路由的安装:
npm install react-router-dom

在src目录下建一个router文件夹
在router文件夹里面建一个index.tsx
index.tsx内容:

import React from 'react';
import {BrowserRouter as Router,Routes,Route,Link
} from 'react-router-dom';
import ManuList from './router';interface MenuItem {title: string;path: string;icon?: string;iconColor?: string;component: React.ComponentType<any>; // 关键修正点:添加泛型参数
}const IndexRouter: React.FC = () => {return (<Routes>{ManuList.map((item: MenuItem) => (<Routekey={item.path} // 使用 path 作为 keypath={item.path}element={<item.component />} // 使用 element 属性并传递 React 元素/>))}</Routes>);
};export default IndexRouter;

再建一个router.tsx

import Home from '../views/Home';
import Article from '../views/Article';
import Album from '../views/Album';
import LinkPage from '../views/LinkPage';// 定义菜单项的类型
interface MenuItem {title: string;path: string;icon: string;iconColor: string;component: React.ComponentType; // 组件类型
}const ManuList: MenuItem[] = [{title: '首页',path: '/',icon: '&#xe628;',iconColor: '#ff08f5',component: Home},{title: '文章记录',path: '/article',icon: '&#xe660;',iconColor: '#6a00fe',component: Article},{title: '相册',path: '/album',icon: '&#xe9f0;',iconColor: '#005efe',component: Album},{title: '友情链接',path: '/link',icon: '&#xe693;',iconColor: '#f50707',component: LinkPage}
];
export default ManuList;

app.tsx

import './App.css'
import { Layout } from 'antd';
import HeaderSide from './common/index/header'
const { Header, Content, Footer } = Layout;
import IndexRouter from './router/index'
function App() {return (<><Header className='shadow-lg py-8'><HeaderSide /></Header><Content><IndexRouter /></Content><Footer></Footer></>)
}export default App

main.tsx:

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.tsx'
import 'virtual:uno.css'
import { BrowserRouter } from 'react-router-dom'; // 引入 BrowserRouter
const container = document.getElementById('root');
const root = createRoot(container!); // 使用 createRootroot.render(<StrictMode><BrowserRouter><App /></BrowserRouter></StrictMode>
);

import HeaderSide from './common/index/header里面的代码:

import logo from '@/assets/img/logo.svg';
import ManuList from '../../router/router';
import { useNavigate } from 'react-router-dom';
function HeaderSide() {const history = useNavigate();const handleClick = (path: string) => {history(path);};return (<div className="app-header flex items-center"><img src={logo} className="App-logo h-64" alt="logo" /><ul className="flex items-center">{ManuList.map((item, index) => {return <li key={index} className="mr-25 text-18 ml-20 cursor-pointer hover:text-blue-500"onClick={() => handleClick(item.path)}><span className="iconfont mr-5"style={{ color: item.iconColor }}  dangerouslySetInnerHTML={{ __html: item.icon }}></span>{item.title}</li>})}</ul></div>)
}
export default HeaderSide

注:在 React Router v7 中,不再使用 useHistory 钩子,React Router 采用了新的 API,其中包括使用 useNavigate 钩子来代替 useHistory。


http://www.ppmy.cn/news/1576775.html

相关文章

【AI+智造】人工智能的前世今生:从图灵测试到DeepSeek革命——如何用技术重构效率边界

作者&#xff1a;Odoo技术开发/资深信息化负责人 日期&#xff1a;2025年3月4日 引言&#xff1a;一场跨越半个世纪的认知革命 1950年&#xff0c;艾伦图灵提出了著名的“图灵测试”&#xff0c;开启了人类对机器智能的想象。70年后&#xff0c;AlphaGo击败围棋世界冠军李世石…

Linux : 环境变量

目录 一 环境变量 1.基本概念 二 常见环境变量 三 查看环境变量的方法 1.env:查看系统中所有环境变量 2. echo $NAME 四 如何不带路径也能运行的自己的程序 1.将自己的程序直接添加到PATH指定的路径下 五 环境变量与本地变量 1.本地变量 2. 环境变量 六C、C中main()…

Docker安装Prometheus监控平台

介绍 Prometheus是一个开源的系统监控和警报工具包&#xff0c;最初由 SoundCloud 开发并开源&#xff0c;现已成为云原生计算基金会&#xff08;CNCF&#xff09;的毕业项目。它广泛应用于监控基础设施、应用程序和服务的性能&#xff0c;并提供强大的数据查询和警报功能。许多…

浅谈开发基于DeepSeek的编程辅助插件需要系统性的技术规划和实施方案

开发基于DeepSeek的编程辅助插件需要系统性的技术规划&#xff0c;以下是分阶段实施方案&#xff0c;包含具体代码示例和技术细节&#xff1a; 一、技术准备阶段 1. 环境配置 # 开发环境建议 Node.js >18.x (VSCode插件) / JDK17 (IntelliJ插件) Python 3.10 (模型交互层…

AMD RDNA3 GPU架构解析

如果你对AMD的RDNA3还不了解&#xff0c;在profile过程中的指标无法完全理解一些指标&#xff0c;比如说你听过着色器性能方面指标"occupancy"&#xff0c;听说它有助于隐藏内存 latency&#xff0c;但不理解其中的具体用法&#xff0c;那这篇文章将对你有一些帮助。…

【Java项目】基于Spring Boot的体质测试数据分析及可视化设计

【Java项目】基于Spring Boot的体质测试数据分析及可视化设计 技术简介&#xff1a;采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介&#xff1a;体质测试数据分析及可视化设计是一个基于Web的在线平台&#xff0c;主要分为前台和后台两大功能模块。前台功能模…

【JMeter】JMeter之MQTT压测

文章目录 MQTT概念Jmeter压测MQTTMQTT服务器下载Jmeter MQTT插件测试MQTT测试思路和解决方法 MQTT概念 MQTT是什么 MQTT是用于物联网&#xff08;IoT&#xff09;的OASIS标准消息传递协议。它被设计为一种非常轻量级的发布/订阅消息传输&#xff0c;非常适合使用较少的代码占用…

浅谈开发环境

前言 工欲善其事&#xff0c;必先利其器。工作中经常用到的各种’东西’&#xff0c;如CMake、QMake、Make、MSBuildCLang、GCC、MinGW、MSVC等&#xff0c;有些在命名上有些类似&#xff0c;实际作用却不尽相同。 因此这里换个角度来了解下这些‘东西’的作用&#xff0c;以…