5.7 react 路由

发布于:2025-05-08 ⋅ 阅读:(25) ⋅ 点赞:(0)

react 状态管理库 14:20

  • react 路由(补充) 数据路由

  • 路由hooks

    • 路由跳转 (方法 标签/内置方法)

    • 获取路由地址栏信息

    • 动态路由实现(多角色权限路由)

  • redux redux-toolkit 状态管理

  • antd 组件使用

1.react 路由 声明式路由

v7: 数据式路由【推荐】 声明式路由

v6: 约定式路由【推荐】 配置式路由

main.js

  import { createRoot } from 'react-dom/client'
  import './index.css'
  import App from './App'
  import { BrowserRouter, Routes, Route } from "react-router";
  import Home from '@/pages/home/Home'
  import Coding from '@/pages/coding/Coding'
  import Pins from '@/pages/pins/Pins'
  import Course from '@/pages/course/Course'
  ​
  import Following from '@/pages/following/Following'
  import Frontend from "@/pages/frontend/Frontend";
  ​
  createRoot(document.getElementById('root')).render(
          <BrowserRouter>
                  <Routes>
                          <Route path="/" element={<App />}>
                           <Route   element={<Home/>}>
                                  <Route index element={<Following/>}></Route>
                                  <Route path="frontend" element={<Frontend/>}></Route>
                           </Route>                
                          </Route>
                  </Routes>
          </BrowserRouter>
         
  )

2.路由hooks

2.1 跳转页面
  • 通过组件跳转 原理 重新封装了a 标签

      
      <NavLink to="跳转路径" >
            Home
      </NavLink>
  • 函数式编程 跳转 hooks 跳转

  
  import { useNavigate } from "react-router";
  ​
  ​
    let navigate = useNavigate();
  ​
  navigate(数字)  //前进几页  后退几页
  navigate('/goods')   //直接跟路径

2.2 获取路由地址栏信息

  
  import { useLocation } from 'react-router'
  ​
  let location = useLocation()   //{path:'/xxx',hash:'/#/xxx'}
  ​
  ​

3.外卖管理系统 -项目搭建

  • 技术栈

vite

react19

react-router v7

less [新知识点:模块化css]

axios || Fetch [新知识点:fetch代替axios]

antd [新知识点]

antd charts [新:图表插件]

  • 路由配置

1.创建所有的页面

2.创建路由配置文件 src/router/index.jsx

注意 layout 页面需要反复多次使用

  
  import { createBrowserRouter } from "react-router";
  ​
  import App from '@/App'
  import Login from '@/pages/login/Login'
  import Layout from '@/pages/layout/Layout'
  import Home from '@/pages/home/Home'
  import AccountList from '@/pages/account/List'
  import AccountEdit from '@/pages/account/Edit'
  import AccountAdd from '@/pages/account/Add'
  import AccountCenter from '@/pages/account/Center'
  import Order from "@/pages/order/Order";
  const router = createBrowserRouter([
      {
          path: "/",
          Component:App,
          children:[
              {
                  index:true,
                  Component:Login
              },
              {
                  path:"home",
                  Component:Layout,
                  children:[
                          {
                              index:true,
                              Component:Home
                          },
                         
                  ]
              },
              {
                  path:'account',
                  Component:Layout,
                  children:[
                      {
                          path:'list',
                          Component:AccountList
                          
                      },
                      {
                          path:'add',
                          Component:AccountAdd
                          
                      },
                      {
                          path:'center',
                          Component:AccountCenter
                          
                      },
                      {
                          path:'edit',
                          Component:AccountEdit
                          
                      }
                  ]
              },
              {
                  path:'order',
                  Component:Layout,
                  children:[
                      {
                          index:true,
                          Component:Order
                      }
                  ]
              }
          ]
      },
     
  ​
  ​
  ​
  ])
  ​
  ​
  export default router

3.修改main.jsx 的配置

全局注入 路由配置

  
  ​
  import { createRoot } from 'react-dom/client'
  import './index.css'
  import {RouterProvider} from 'react-router'
  import router from '@/router'
  ​
  createRoot(document.getElementById('root')).render(
      <RouterProvider router={router}></RouterProvider>
  )
  ​

4.根页面和 一级页面需要进行占位

  • app.jsx

  
  import React from 'react'
  import { Outlet } from 'react-router'
  export default function App() {
    return (
      <>
        <Outlet />
      </>
    )
  }
  ​
  • layout.jsx

  
  import React from 'react'
  import { Outlet } from 'react-router'
  export default function Layout() {
    return (
      <>
        <div>顶部</div>
        <div>左侧菜单</div>
        <div>
          <Outlet></Outlet>
        </div>
      </>
    )
  }
  ​

4.antd 使用

  • 下载安装

  
  pnpm install antd
  • 使用

  
  import React from 'react'
  import { Button , Form, Input } from 'antd';
  import './index.less'
  export default function Login() {
  ​
    const onFinish = values => {
      console.log('Success:', values);
    };
  ​
  ​
    return (
      <>
        <div className="login">
          <div className="form-box">
  ​
            <Form
              onFinish={onFinish}
            >
  ​
              <Form.Item
                label="账号"
                name="account"
                rules={[{ required: true, message: '请输入您的账号' }]}
              >
                <Input />
              </Form.Item>
  ​
              <Form.Item
                label="密码"
                name="password"
                rules={[{ required: true, message: '请输入密码' }]}
              >
                <Input.Password />
              </Form.Item>
  ​
              <Form.Item label={null}>
                <Button type="primary" htmlType="submit">
                  登录
                </Button>
            </Form.Item>
  ​
  ​
  ​
            </Form>
  ​
  ​
          </div>
        </div>
      </>
    )
  }
  ​


网站公告

今日签到

点亮在社区的每一天
去签到