react笔记-03react-router篇

news2025/2/2 5:52:26

本文章是react的路由笔记

一、react路由(v5版本)

1. 什么是路由(前端)?

  1. 一个路由就算一个映射关系(key: value)
  2. key为路径,value为组件

2. 前端路由的工作原理

根据浏览器历史记录:history(BOM)

3. 路由的基本使用(react-router-dom)

3.1 react-router:(有三种库)

  • web (react-router-dom)
  • react-native
  • any(react-router)

3.2 react-router-dom 的api(版本5/v5)

安装
npm i react-router-dom@5
内置组件
1. <BrowserRouter>
2. <HashRouter>
3. <Route>
4. <Redirect>
5. <Link>
6. <NavLink>
7. <Switch>
其他
  1. history 对象
  2. match 对象
  3. withRouter 函数

3.3 基本使用

App.js中

import { Component } from 'react'
import { Link, Route } from 'react-router-dom'
import Home from './pages/Home'
import About from './pages/About'

export default class App extends Component {
	render() {
		return {
			<div>
				<header>
					{/* 编写路由链接 */}
					<Link to="/home">首页</Link>
					<Link to="/about">关于</Link>
				</header>
				<main>
					{/* 注册路由 */}
					<Route path="/home" component={Home} />
					<Route path="/about" component={About} />
				</main>
			</div>
		}
	}
}

index.js中

import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter, HashRouter } from 'react-router-dom'
import App from './App'

ReactDOM.render(
	{/* history路由 */}
	<BrowserRouter>
		<App />
	</BrowserRouter>
	{/* hash路由 */}
	<HashRouter></HashRouter>
	, document.querySelect('#root'))

3.4 路由组件与一般组件

一般组件的props信息需要通过父组件传递,而路由组件的props信息是路由信息,不需要传递。

3.5 NavLink的使用

  1. NavLink的基本使用

匹配上的路由会默认加上active这个类名

<NavLink to="/home">首页</NavLink>
<NavLink to="/about">关于</NavLink>

通过activeClassName可以自定义选中的类名

<NavLink to="/home" activeClassName="header-active">首页</NavLink>
<NavLink to="/about" activeClassName="header-active">关于</NavLink>
  1. NavLink的封装

组件的使用:

{/* 「首页」标题:组件标签标签体内容(特殊的标签属性,组件内可以通过this.props.children获取) */}
<MyNavLink to="/home">首页</MyNavLink>
<MyNavLink to="/about">关于</MyNavLink>

组件的封装:

{/* 一组props */}
<NavLink to={to} activeClassName="header-active">首页</NavLink>
{/* 多组props */}
<NavLink {...this.props} activeClassName="header-active"/>

3.6 Switch的使用

Switch:当匹配到第一个路由的时候就停止

<Switch>
  <Route path="/home" component={Home} />
  <Route path="/about" component={About} />
  <Route path="/about" component={Demo} />
</Switch>

3.7 路由的模糊匹配与精准匹配

模糊匹配:

<header>
  <NavLink to="/about/a/b">关于</NavLink>
</header>
<main>
  <Switch>
    <Route path="/about" component={About} />
  </Switch>
</main>

精准匹配:exact={true}

<Route exact={true} path="/about" component={About} />

3.8 Redirect的使用

Redirect(重定向):谁都匹配不上,就走Redirect

<Switch>
  <Route path="/home" component={Home} />
  <Route path="/about" component={About} />
  <Redirect to="/about" />
</Switch>

3.9 嵌套路由

嵌套路由要写完整路径

<div>
  <NavLink to="/home/news">News</NavLink>
  <NavLink to="/home/message">Message</NavLink>
</div>
<div>
  <Switch>
    <Route path="/home/news" component={News} />
    <Route path="/home/message" component={Message} />
  </Switch>
</div>

3.10 路由组件传参

1. 向路由组件传递params参数

传递的参数:

<NavLink to={`/home/news/${title}/${page}`}>News</NavLink>
<Route path="/home/news/:title/:page" component={News} />

News组件可以通过this.props.match.params获取到params参数

2. 向路由组件传递search(query)参数(显式传参)

使用:

<NavLink to={`/home/news?title=${title}&page=${page}`}>News</NavLink>

{/* search参数无需声明接收,正常注册路由即可 */}
<Route path="/home/news" component={News} />

接收:

接收到的search参数是urlencoded编码的字符串,需要借助querystring解析

key=value&key=value => urlencoded编码

安装query-string

npm i query-string
import qs from 'query-string'

qs.parse(this.props.location.search)
3. 向路由组件传递state参数(隐式传参)

使用:

<NavLink to={{pathname: '/home/news', state: { title, page }}}>News</NavLink>

{/* state参数无需声明接收,正常注册路由即可 */}
<Route path="/home/news" component={News} />

接收:

通过this.props.location.state接收,BrowserRouter刷新参数不丢失,HashRouter刷新参数丢失

3.11 push与replace模式

  • push:会留下痕迹,可以通过回退键,回到上一页
  • replace:不会留下痕迹,不能回到上一页

3.12 编程式路由导航

// 路由跳转
this.props.history.replace('/xxx', [state])
this.props.history.replace('/xxx', { id, title })
this.props.history.push('/xxx', [state])
this.props.history.push('/xxx', { id, title })
// 路由前进
this.props.history.goForward()
// 路由后退
this.props.history.goBack()
// 与vue中的go类似,传入number,正数表示前进,负数表示后退
this.props.history.go(number)

3.13 withRouter的使用

在一般组件内,不能像路由组件一样获取到路由信息,需要在组件上包裹一个withRouterwithRouter可以加工一般组件,让一般组件具备路由组件所特有的api,withRouter的返回值是一个新组件。

import React, { Component } from 'react'
import { withRouter } from 'react-router-dom'

class App extends Component {
  handleClick = () => {
    console.log(this.props)
  }

  render() {
    return (
      <div onClick={this.handleClick}>关于</div>
    )
  }
}

export default withRouter(App)

二、react路由(v6版本)

1. Component

1.1 <Routes/><Route/>

  1. v6版本中移除了之前的<Switch>,用<Routes>代替

  2. <Routes/><Route/>要配合使用,且必须要用<Routes>包裹<Route>

  3. <Route caseSensitive>属性用于指定:匹配时是否区分大小写(默认为false)

  4. <Route>也可以嵌套使用,且可配合useRoutes()配置路由表,但需要通过<Outlet>组件来渲染其子路由

  5. <Route>end属性:如果他的子路由匹配,父亲路由失去高亮

  6. 写法区别:

    import { Routes, Route, Navigate } from 'react-router-dom'
    
    {/* Switch组件 替换成 Routes */}
    <Routes>
        {/* Route的component属性变成element属性 */}
        {/* v5写法:<Route path='/' component={Home} /> */}
        {/* v6写法:<Route path='/' element={<Home />} /> 写成标签 */}
        <Route caseSensitive path='/home' element={<Home />} />
        <Route path='/about' element={<About />} />
        {/* 重定向,不用Redirect,而是Navigate */}
        {/* 用法:<Navigate to="/home" replace={true} /> */}
        {/* replace跳转模式:push/replace模式,默认false(push) */}
        <Route path='/' element={<Navigate to="/home" />} />
      	{/* end属性:如果他的子路由匹配,父亲路由失去高亮 */}	
      	<Route path='/' end element={<Navigate to="/home" />} />
    </Routes>
    

1.2 <NavLink>

  1. 自定义选中的高亮样式

    {/* v5写法 */}
    <NavLink activeClassName="xxx">
    {/* v6写法:在className属性中写入函数,函数返回类名 */}
    <NavLink to='/home' className={({isActive}) => { return isActive ? 'item active' : 'item' }}>Home</NavLink>
    
    <NavLink to='/home' className={(e) => {console.log(e);}}>Home</NavLink>
    

    下面是的参数e:

    在这里插入图片描述

1.3 <Navigate>

  1. <Navigate>:重定向,不用Redirect,而是Navigate。渲染到页面上,会让路由进行跳转。
  2. 用法:<Navigate to="/home" />
  3. replace属性:路由跳转模式,push/replace模式,默认false(push)<Navigate to="/home" replace={true} />

2. Hooks

2.1 useRoutes()

注册路由:

  • 写法1:
{/* 注册路由 */}
<Routes>
  <Route path='/home' element={<Home />} />
  <Route path='/about' element={<About />} />
  <Route path='/' element={<Navigate to="/home" />} />
</Routes>
  • 写法2:由useRoutes生成路由表
import React from 'react'
import { NavLink, Navigate, useRoutes } from 'react-router-dom'
import About from './pages/About'
import Home from './pages/Home'

export default function App() {

  // 通过路由表生成路由
  const routeElement = useRoutes([
    {
      path: '/home',
      element: <Home />
    },
    {
      path: '/about',
      element: <About />
    },
    {
      path: '/',
      element: <Navigate to="/home" />
    }
  ])

  return (
    <div>
      <NavLink to='/home'>Home</NavLink> | <NavLink to='/about'>About</NavLink>
      <hr />
      {/* 注册路由 */}
      { routeElement }
    </div>
  )
}

2.2 嵌套路由

在路由表添加children属性即可

const routeElement = useRoutes([
  {
    path: '/home',
    element: <Home />
  },
  {
    path: '/about',
    element: <About />,
    children: [
      {
        path: 'news',
        element: <div>news</div>
      },
      {
        path: 'message',
        element: <div>message</div>
      }
    ]
  },
  {
    path: '/',
    element: <Navigate to="/home" />
  }
])

About组件中,需要一个路由出口,用Outlet来展示二级子路由

import React from 'react'
import { NavLink, Outlet } from 'react-router-dom'

export default function index() {
  return (
    <div>About
      <br />
      {/* v5写法 */}
      <NavLink to="/about/news">news</NavLink> | <NavLink to="/about/message">message</NavLink>
      {/* v6中:同v5,也可以只写子路由路径,但是不能带斜杠,类似于vue */}
      <NavLink to="news">news</NavLink> | <NavLink to="message">message</NavLink>
      {/* 路由出口 */}
      <Outlet />
    </div>
  )
}

2.3 useParams()(获取params参数)

useParams()获取传递的params参数

import { useParams } from 'react-router-dom'

2.4 useMatch()(获取params参数)

useMatchuseParams都可以用来读取params参数

使用:useMatch('/home/:id/:title')

2.5 useSearchParams()(获取search参数)

useSearchParams用来获取search(query)参数,返回的是一个数组

  1. searchParams:获取到search参数,但是需要通过get()方法获取
// 我的url为http://localhost:5173/about/news?id=1&title=haha
const [searchParams, setSearchParams] = useSearchParams()
// 需要通过get方法,传入key,获取到value
let id = searchParams.get('id'))
  1. setSearchParams:更改search参数
setSearchParams('id=2&title=hello')

2.6 useLocation()(获取search、state参数)

  1. 获取search参数:

useLocationuseSearchParams都可以获取search参数,不用像useMatch那样传递路径。

  1. 获取state参数:

传递state参数(隐式传参):

{/* v5写法 */}
<NavLink to={{ pathname: '/home', state: {name: 'xiaotian', age: 20} }}>Home</NavLink>
{/* v6写法 */}
<NavLink to='/home' state={{ name: 'xiaotian', age: 20 }}>Home</NavLink>
  1. 使用useLocation()
// 对象的连续解构
const { state: {name, age} } = useLocation()

2.7 路由传参总结

params => useParams、useMatch

search(query) => useSearchParams、useLocation

state => useLocation

2.8 编程式路由导航

let navigate = useNavigate()
// 1. 基本使用
navigate('/about')
// 2. 子路由
navigate('news')
// 3. 传递state参数
navigate('news', {
  replace: false,
  state: {
    name: 'xiaotian',
    age: 20
  },
})
// 4. 前进
navigate(1)
// 5. 后退
navigate(-1)

2.9 useInRouterContext()

  1. 作用:用于判断组件是否被路由包裹着
  2. 返回值:boolean

2.10 useNavigationType()

  1. 作用:返回当前的导航类型(用户是如何来到当前页面的)
  2. 返回值:poppushreplace
  3. 备注:pop是指直接在浏览器中打开了这个路由组件(复制链接、刷新进入)

2.11 useOutlet()

  1. 作用:用来呈现当前组件中渲染的嵌套路由
  2. 返回值:如果嵌套路由没有挂载,则res返回null;如果嵌套路由已经挂载,则展示嵌套路由对象。
let res = useOutlet()

2.12 useResolvedPath

作用:给定一个url值,解析其中的pathsearchhash值。

三、项目中如何配置路由表(v6版本)

1. 标签形式

  1. src下创建router目录,新建index.jsx

这里用到了嵌套路由的写法

import { BrowserRouter, Routes, Route } from 'react-router-dom'
import App from '../App'
import Home from '../views/Home/Home'
import About from '../views/About/About'

const baseRouter = () => {
    return (
        <BrowserRouter>
            <Routes>
            	{/* 嵌套路由写法 */}
                <Route path='/' element={<App />}>
                    <Route path='/home' element={<Home />}></Route>
                    <Route path='/about' element={<About />}></Route>
                </Route>
            </Routes>
        </BrowserRouter>
    )
}

export default baseRouter
  1. main.jsx中将原有的App根组件替换成路由表组件
import ReactDOM from 'react-dom/client'
import BaseRouter from './router/index.jsx'

ReactDOM.createRoot(document.getElementById('root')).render(
  <BaseRouter />,
)
  1. App.jsx中配置路由出口
import { Outlet } from 'react-router-dom'

export default function App() {
  return (
    <div>
      {/* 占位符,用于展示组件,类似于vue的router-view(路由出口) */}
      <Outlet />
    </div>
  )
}

2. Hook形式

2.1 基本使用

  1. src下创建router目录,新建index.jsx
import { Navigate } from 'react-router-dom'
import Home from '../views/Home/Home'
import About from '../views/About/About'

const routes = [
    // 当App组件使用了useRoutes渲染路由时,就不允许在路由表中配置App组件有关的路由
    // 错误写法:会导致页面不停渲染,最终卡死
    // {
    //     path: '/',
    //     element: <App />
    // },
    {
        path: '/',
        element: <Navigate to="/home" />
    },
    {
        path: '/home',
        element: <Home />
    },
    {
        path: '/about',
        element: <About />
    },
    // 错误页面,重定向到404
    {
        path: '*',
        element: <Navigate to="/404" />
    }
]

export default routes
  1. main.jsx中用BrowserRouterHashRouter包裹一下根组件
import React from 'react'
import ReactDOM from 'react-dom/client'
import { BrowserRouter } from 'react-router-dom'
import App from './App.jsx'

ReactDOM.createRoot(document.getElementById('root')).render(
  <BrowserRouter>
    <App />
  </BrowserRouter>,
)
  1. App.jsx中渲染路由
import { useRoutes } from 'react-router-dom'
import router from './router'

export default function App() {
  const outlet = useRoutes(router)
  return (
    <div>
    	// 渲染路由
      	{ outlet }
    </div>
  )
}

2.2 路由懒加载

router/index.jsx中,使用lazy即可实现路由的懒加载

import { lazy } from 'react'

const Home = lazy(() => import('../views/Home/Home'))

但是通常情况下,lazySuspense是结合使用的,不然会出现报错(但是我目前写lazy没有出现报错),可以通过如下代码书写我们的懒加载路由:

import { lazy, Suspense } from 'react'
import { Navigate } from 'react-router-dom'

const Home = lazy(() => import('../views/Home/Home'))
const About = lazy(() => import('../views/About/About'))

const routes = [
    {
        path: '/',
        element: <Navigate to="/home" />
    },
    {
        path: '/home',
        element: (
            // 当路由很多时,书写这段代码会显得非常繁琐,可以封装一个withLoadingComponent方法
            <Suspense fallback={<div>loading...</div>}>
                <Home />
            </Suspense>
        )
    },
    {
        path: '/about',
        element: withLoadingComponent(<About />),
    }
]

// comp的ts类型为JSX.Element
const withLoadingComponent = (comp) => {
    return (
        <Suspense fallback={<div>loading...</div>}>
            { comp }
        </Suspense>
    )
}

export default routes

2.3 嵌套路由

路由表通过children属性可以书写子路由,但是子路由并不会直接展示在页面上,需要通过在展示子路由的页面上放置路由出口<Outlet />

路由表配置:

const routes = [
    {
        path: '/',
        element: <Navigate to="/home" />
    },
    {
        path: '/home',
        element: <Home />
    },
    {
        path: '/about',
        element: <About />,
        // 子路由
        children: [
            {
                path: '/about/news',
                element: <News />
            }
        ]
    }
]

路由出口:(在About组件内)

import React from 'react'
import { Outlet } from 'react-router-dom'

export default function about() {
  return (
    <div>
      about
      <Outlet />
    </div>
  )
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1852637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution {public int[] twoSum(int[] numbers, int target) {int low 0, high numbers.length - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return new int[]{low 1, high 1};} else i…

C++ (week9):Git

文章目录 1.git介绍2.git安装3.git配置4.获取自己的SSH公钥5.新建仓库6.邀请开发者7.克隆远程仓库到本地8.在本地进行开发9.本地项目推送到远程仓库10.git的工作原理11.分支管理(1)合作开发的方式(2)分支管理(3)分支合并的原理、冲突管理 12.git 与 svn 的区别13.设置alias别名…

Ubuntu iso 镜像下载 步骤截图说明

Ubuntu镜像下载&#xff0c;在这个网址&#xff1a; Enterprise Open Source and Linux | Ubuntu 步骤如下图所示&#xff1a; 1、登入网址 2、点击Get Ubuntu 3、点击Download Ubuntu Desktop 后续点击Downloadload 24.04 LTS直接下载就行 如果需要下载其它版本&#xf…

0 知识的补充

目录 矢量运算 矢量加法 矢量减法 矢量点乘 矢量叉乘 矢量混合积 坐标系 直角坐标系 柱坐标系 球坐标系 ​​​​​​​ 矢量运算 矢量加法 矢量减法 矢量点乘 矢量叉乘 ​​​​​​​ 矢量混合积 坐标系 直角坐标系 柱坐标系 ​​​​​​​ 球坐标系

MATLAB-SSA-CNN-SVM,基于SSA麻雀优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

MATLAB-SSA-CNN-SVM,基于SSA麻雀优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1.数据均为Excel数据&#xff0c;直接替换数据就可以运行程序。 2.所有程序都经过验证&#xff0c;保证程序可以运行。 3.具有良好的编程习惯&#xff0c;程序均包含…

【密码学】分组密码

文章目录 分组密码的模式分组密码与流密码模式明文分组与密文分组 ECB模式ECB定义ECB特点对ECB模式的攻击改变分组顺序攻击 CBC模式CBC定义初始化向量IVCBC特点对CBC模式的攻击对初始向量进行反转攻击填充提示攻击 CFB模式CFB定义对CFB模式的攻击重放攻击 OFB模式OFB定义CFB模式…

模板初阶【C++】

模板的作用 模板的主要作用是实现泛型编程&#xff0c;泛型编程即编写与类型无关的通用代码&#xff0c;是代码复用的一种手段 模板就是泛型编程的基础。 例 我们经常使用的交换函数就可以使用泛型编程来进行编写&#xff0c;这样可以大大减少重复的代码 一般编写方式 可以…

MyBatis拦截器(Interceptor)的理解与实践

文章目录 1. 什么是MyBatis拦截器&#xff1f;2. 拦截器的基本原理3. 编写自定义拦截器3.1 示例&#xff1a;实现SQL执行时间统计拦截器3.2 配置拦截器 4. 实战应用场景5. 总结 &#x1f389;欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博…

可视化大屏开发系列——页面布局

页面布局是可视化大屏的基础&#xff0c;想要拥有一个基本美观的大屏&#xff0c;就得考虑页面整体模块的宽高自适应&#xff0c;我们自然就会想到具有强大灵活性flex布局&#xff0c;再借助百分比布局来辅助。至此&#xff0c;大屏页面布局问题即可得到解决。 可视化大屏开发系…

三大交易所全面恢复 IPO 申请

6月21日晚间&#xff0c;北交所受理了3家企业的IPO申请&#xff0c;这是北交所时隔3个月之后恢复IPO受理。6月20日晚间&#xff0c;沪深交易所各受理了1家IPO申请&#xff0c;这是沪深交易所时隔半年后再次受理IPO。这也意味着&#xff0c;三大交易所IPO受理全部恢复。 6月21日…

Ubuntu-基础工具配置

基础工具配置 点击左下角 在弹出界面中点击 以下命令都是在上面这个界面执行&#xff08;请大家注意空格&#xff09; 命令输入完后&#xff0c;回车键就是执行,系统会提示输入密码&#xff08;就是你登录的密码&#xff09; 1.安装net工具 &#xff1a;&#xff08;ifconfi…

代码-功能-python-爬取博客网标题作者发布时间

环境&#xff1a; python 3.8 代码&#xff1a; # 爬取博客园内容 # https://www.cnblogs.com/import re from lxml import etree import requests import json import threading from queue import Queue import pymysql import timeclass HeiMa:def __init__(self):# 请…

2小时极速入门 TypeScript-慕课网 笔记

TS文档&#xff1a;https://www.tslang.cn/docs/handbook/modules.html 一&#xff0c;什么是TS 注:Typescript无法在浏览器中运行 ,所以需要编译器,将TS转变为JS 问&#xff1a;TS运行这么麻烦&#xff0c;为什么还要有TS&#xff1f; 答&#xff1a;TS强类型 1&#xff0c;规…

【大疆pocket3】到手后5个必改初始设置关键点(上)

【大疆pocket3】到手后5个必改初始设置关键点&#xff08;上&#xff09; 一&#xff0c;简介二&#xff0c;必改关键点2.1 视频拍摄格式2.2 竖拍选择2.3 开拍后息屏设置2.4 摇杆转速设置2.5 提示音设置为静音 一&#xff0c;简介 本文记录大疆pocket3上手后5个必改关键点&…

独立看门狗窗口开门狗

独立看门狗 接线图&#xff1a;按键用于阻塞喂狗。独立看门狗&窗口开门狗接线一样。 第一步&#xff0c;是开启时钟了&#xff0c;只有这个LSI时钟开启了独立看门狗才能运行&#xff0c;所以初始化独立看门狗之前&#xff0c;LSI必须得开启&#xff0c;但是这个开启LSI的…

System.Data.OracleClient.OracleException:“ORA-12571: TNS: 包写入程序失败

System.Data.OracleClient.OracleException:“ORA-12571: TNS: 包写入程序失败 解决方法&#xff1a; 首先%oracle_home%/network/admin下的sqlnet.ora文件&#xff0c;把SQLNET.AUTHENTICATION_SERVICES (NTS)加个 # 注释掉就好了

稳态与敏态业务阶段

稳态业务就是比如你登录学校的图书馆教务处这些业务系统 用户数量和数据基本上不会发生太大的变化 业务系统的更新也不是很频繁&#xff0c;比较方便资源的采购 敏态业务就是比如我开发一个应用上线了&#xff0c;我不知道有多少用户和数量&#xff0c;无法预估 这就没办法…

计算机专业:昔日万金油,明日科技潮头的弄潮儿

高考后的十字路口&#xff1a;计算机专业&#xff0c;依旧闪耀吗&#xff1f; 随着2024年高考的尘埃落定&#xff0c;数百万青春洋溢的脸庞再次凝视着未来的迷雾&#xff0c;试图在繁星点点的专业宇宙中找到那颗最亮的星——计算机科学与技术。长久以来&#xff0c;计算机专业…

自动驾驶辅助功能测试用例表格(续2)

自动驾驶辅助功能测试用例表格&#xff08;续&#xff09; 用例编号测试类型测试项目测试描述车辆准备车辆状态车辆场景车辆执行可变因素具体信号状态通过标准预期标准通过/失败TJA-001功能测试交通拥堵辅助 (TJA)测试TJA系统在交通拥堵情况下的自动跟车和保持车道功能TJA系统已…

高性能并行计算华为云实验四:快排算法实验

目录 一、实验目的 二、实验说明 三、实验过程 3.1 创建快排算法源码 3.2 makefile的创建与编译 3.3 主机文件配置与运行监测 四、实验结果与分析 4.1 结果一及分析 4.2 结果二及分析 五、实验思考与总结 5.1 实验思考 5.2 实验总结 END&#xff5e; 一、实验目的…