马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
- 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: '',
- iconColor: '#ff08f5',
- component: Home
- },
- {
- title: '文章记录',
- path: '/article',
- icon: '',
- iconColor: '#6a00fe',
- component: Article
- },
- {
- title: '相册',
- path: '/album',
- icon: '',
- iconColor: '#005efe',
- component: Album
- },
- {
- title: '友情链接',
- path: '/link',
- icon: '',
- 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。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|