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

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

  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) => (
        <Route
          key={item.path} // 使用 path 作为 key
          path={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!); // 使用 createRoot

root.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。

相关文章:

  • 厦大第三发:《DeepSeek大模型及其企业应用实践》
  • 1.Big-endian/ little endian大端对齐、小端对齐
  • Camera相关配置
  • 带宽管理组网配置
  • Web Snapshot 网页截图 模块代码详解
  • 生活反思公园散步与小雨遇记
  • MoE 架构:专家齐聚,智启未来 —— 解锁传统稠密模型的瓶颈
  • MongoDB 查询语句详解:以 `db.fs.files.find().sort({ _id: -1 }).limit(10)` 为例
  • excel的宏是什么
  • AI 实战5 - pytorch框架实现face检测
  • 如何快速的用pdfjs建立一个网页可以在线阅读你的PDF文件
  • 自动驾驶---不依赖地图的大模型轨迹预测
  • 在 Spring Boot 中格式化 LocalDateTime
  • Ubuntu20.04双系统安装及软件安装(九):谷歌浏览器
  • 开发环境搭建-01.前端环境搭建
  • 【算法方法总结·四】字符串操作的一些技巧和注意事项
  • html常用标签
  • spi_device,spi_driver,spi_controller,spi_res,spi_transfer,spi_message之间的联系
  • DSP笔记
  • 【商城实战(7)】商城项目中用户信息管理功能的全栈开发
  • 上海市重大工程一季度开局良好,多项生态类项目按计划实施
  • 创同期历史新高!1至4月全国铁路发送旅客14.6亿人次
  • 第十二届警博会在京开幕:12个国家和地区835家企业参展
  • 国务院关税税则委员会关于调整对原产于美国的进口商品加征关税措施的公告
  • 人大新闻教育70年丨16759门课程里的时代密码
  • 伊朗外长称正与美国进行“善意”的会谈