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

用react实现router路由

说明:
用react实现router路由
效果图:
在这里插入图片描述

step0:项目结构图:

my-react-app/
├── public/                  # 静态资源
│   ├── favicon.ico
│   └── robots.txt
├── src/
│   ├── assets/             # 静态资源
│   ├── pages/              # 页面组件
│   │   ├── Home.jsx           # 首页模块
│   │   └── User.jsx         # 用户模块
│   ├── App.jsx
│   └── main.jsx

step1:C:\Users\wangrusheng\PycharmProjects\untitled16\src\main.jsx

// src/main.jsx
import React from 'react'
import ReactDOM from 'react-dom/client'
import { BrowserRouter } from 'react-router-dom'
import App from './App.jsx'
import './index.css'

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
)

step2:C:\Users\wangrusheng\PycharmProjects\untitled16\src\App.jsx

// App.jsx
import { NavLink, Routes, Route, Navigate } from 'react-router-dom'
import Home from './pages/Home'
import User from './pages/User'
import './App.css' // 新增 CSS 文件

export default function App() {
  return (
    <div className="app-container">
      {/* 左侧导航 */}
      <div className="sidebar">
        <h2>路由列表</h2>
        <nav>
          <NavLink
            to="/home"
            className={({ isActive }) =>
              `nav-link ${isActive ? 'active' : ''}`
            }
          >
            首页
          </NavLink>
          <NavLink
            to="/user"
            className={({ isActive }) =>
              `nav-link ${isActive ? 'active' : ''}`
            }
          >
            用户中心
          </NavLink>
        </nav>
      </div>

      {/* 右侧内容 */}
      <div className="content">
        <Routes>
          <Route path="/" element={<Navigate to="/home" />} />
          <Route path="/home" element={<Home />} />
          <Route path="/user" element={<User />} />
        </Routes>
      </div>
    </div>
  )
}

step3:C:\Users\wangrusheng\PycharmProjects\untitled16\src\App.css

/* App.css */
.app-container {
  display: flex;
  min-height: 100vh;
}

.sidebar {
  width: 200px;
  background-color: #f5f5f5;
  padding: 20px;
  border-right: 1px solid #ddd;
}

.sidebar h2 {
  margin-bottom: 1rem;
  color: #333;
}

.nav-link {
  display: block;
  padding: 10px;
  text-decoration: none;
  color: #333;
  border-radius: 4px;
  margin-bottom: 8px;
  transition: all 0.3s ease;
}

/* 鼠标悬停效果 */
.nav-link:hover {
  background-color: #e0e0e0;
}

/* 选中状态 */
.nav-link.active {
  background-color: #4CAF50;
  color: white !important;
}

.content {
  flex: 1;
  padding: 20px;
  background-color: white;
}

step4:C:\Users\wangrusheng\PycharmProjects\untitled16\src\pages\User.jsx

// src/pages/User.jsx
export default function User() {
  return (
    <div>
      <h2>用户中心</h2>
      <p>Hello World from User!</p>
    </div>
  )
}

step5:C:\Users\wangrusheng\PycharmProjects\untitled16\src\pages\Home.jsx

// src/pages/Home.jsx
export default function Home() {
  return (
    <div>
      <h2>首页内容</h2>
      <p>Hello World from Home!</p>
    </div>
  )
}

end

http://www.dtcms.com/a/98398.html

相关文章:

  • C++ 中名字的作用域、概念、嵌套与实践(十八)
  • Java基础-22-基本语法-实体类
  • 【MySQL篇】事务管理,事务的特性及深入理解隔离级别
  • Unity功能模块一对话系统(5)-完善对话流程及功能
  • Python针对大规模数据使用”sys模块加速I/O操作“:
  • 21天Python计划:函数简单介绍
  • PCBB印刷电路板缺陷检测YOLO数据集分享
  • LeetCode hot 100—两两交换链表中的节点
  • Redis场景问题1:缓存穿透
  • 用python压缩图片大小
  • 算法-广度优先搜索
  • WSL系统找不到指定的文件
  • 接口自动化——初识pytest
  • (头歌作业—python)3.2 个人所得税计算器(project)
  • 智能发光斑马线:点亮城市道路安全之光
  • DDR(Double Data Rate)详解
  • 云边端协同
  • vue 脚手架解决跨域问题
  • 2022年12月青少年软件编程(图形化)等级考试三级编程题
  • 在树莓派5(8G版)上运行Ollama + LLM
  • NG-ZORRO中tree组件的getCheckedNodeList怎么使用
  • 26考研——排序_选择排序_选择排序的基本思想 简单选择排序(8)
  • 每天一篇目标检测文献(六)——Part One
  • 小林coding-12道Spring面试题
  • 自然语言处理(17:(第五章2.)梯度消失和LSTM(详细拆解))
  • WebSocket通信的握手阶段
  • 基于 WebAssembly 的 Game of Life 交互实现
  • ArrayList和LinkedList比较
  • 使用 Python 进行链上数据监控:让区块链数据触手可及
  • 深入解析音频:格式、同步及封装容器