0501路由-react-仿低代码平台项目
文章目录
- 1 react路由
- 1.1 核心库:React Router
- 安装
- 1.2 基本路由配置
- 路由入口组件
- 定义路由
- 1.3 导航方式
- 使用 `<Link>` 组件
- 编程式导航
- 1.4 动态路由参数
- 定义参数
- 获取参数
- 1.5 嵌套路由
- 父路由配置
- 子路由占位符
- 1.6 重定向与404页面
- 重定向
- 404页面
- 1.7 路由守卫(权限控制)
- 1.8 代码分割与懒加载
- 注意事项
- 完整示例
- 2 问卷系统业务流程图
- 阶段1:用户身份验证
- 阶段2:问卷创建与管理
- 阶段3:问卷发布与分发
- 阶段4:数据收集与填写
- 阶段5:数据分析与处理
- 阶段6:问卷终止或循环
- 关键分支说明
- 3 路由设计
- 3.1 页面对应的路由
- 3.2、Layout模版
- 4 实践
- 4.1 创建页面
- 4.2 创建layout
- 4.3 配置router
- 4.4 使用路由api-页面跳转和获取参数
- 4.5 自定义网页标题和favicon
- 结语
1 react路由
1.1 核心库:React Router
React 官方推荐使用 React Router 实现路由功能。当前主流版本是 v6.x(注意与旧版 v5 的语法差异)。
安装
yarn add react-router-dom
1.2 基本路由配置
路由入口组件
在应用顶层包裹 <BrowserRouter>(或 <HashRouter>):
import { BrowserRouter } from 'react-router-dom';function App() {return (<BrowserRouter>{/* 路由配置 */}</BrowserRouter>);
}
定义路由
使用 <Routes> 和 <Route> 定义路由映射:
import { Routes, Route } from 'react-router-dom';
import Home from './Home';
import About from './About';
import User from './User';function App() {return (<Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /><Route path="/user/:id" element={<User />} /></Routes>);
}
1.3 导航方式
使用 <Link> 组件
替代 <a> 标签实现无刷新跳转:
import { Link } from 'react-router-dom';function Nav() {return (<nav><Link to="/">Home</Link><Link to="/about">About</Link></nav>);
}
编程式导航
通过 useNavigate Hook 跳转:
import { useNavigate } from 'react-router-dom';function Button() {const navigate = useNavigate();return (<button onClick={() => navigate('/user/123')}>Go to User 123</button>);
}
1.4 动态路由参数
定义参数
在路径中使用 :param 定义动态参数:
<Route path="/user/:id" element={<User />} />
获取参数
通过 useParams Hook 获取参数:
import { useParams } from 'react-router-dom';function User() {const { id } = useParams();return <div>User ID: {id}</div>;
}
1.5 嵌套路由
父路由配置
使用嵌套 <Route> 定义子路由:
<Route path="/dashboard" element={<Dashboard />}><Route path="profile" element={<Profile />} /><Route path="settings" element={<Settings />} />
</Route>
子路由占位符
父组件中通过 <Outlet> 渲染子路由内容:
import { Outlet } from 'react-router-dom';function Dashboard() {return (<div><h1>Dashboard</h1><Outlet /> {/* 子路由在此渲染 */}</div>);
}
1.6 重定向与404页面
重定向
使用 <Navigate> 组件:
<Route path="/old-path" element={<Navigate to="/new-path" />} />
404页面
通过 path="*" 匹配未知路径:
<Route path="*" element={<NotFound />} />
1.7 路由守卫(权限控制)
通过封装 <Route> 实现登录验证等逻辑:
function PrivateRoute({ children }) {const isAuthenticated = checkAuth(); // 自定义权限检查return isAuthenticated ? children : <Navigate to="/login" />;
}// 使用
<Route path="/admin" element={<PrivateRoute><Admin /></PrivateRoute>} />
1.8 代码分割与懒加载
结合 React.lazy 实现路由懒加载:
const About = React.lazy(() => import('./About'));<Route path="/about" element={<React.Suspense fallback={<Loading />}><About /></React.Suspense>
} />
注意事项
- 版本兼容性:v6 与 v5 差异较大(如
Switch替换为Routes,component改为element)。 - 路径匹配:v6 默认精确匹配,无需添加
exact属性。 - 相对路径:v6 支持嵌套路由中的相对路径跳转。
完整示例
import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';function App() {return (<BrowserRouter><nav><Link to="/">Home</Link><Link to="/about">About</Link></nav><Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /><Route path="/user/:id" element={<User />} /><Route path="*" element={<NotFound />} /></Routes></BrowserRouter>);
}
掌握这些核心概念后,你可以构建复杂的路由逻辑,实现动态页面切换、权限控制等高级功能。
2 问卷系统业务流程图
阶段1:用户身份验证
阶段2:问卷创建与管理
阶段3:问卷发布与分发
阶段4:数据收集与填写
阶段5:数据分析与处理
阶段6:问卷终止或循环
关键分支说明
- 权限控制
- 管理员可批量管理问卷、审核敏感内容;
- 普通用户仅限操作自有问卷。
- 异常处理
- 填写中断自动保存草稿;
- 提交失败时提示错误类型(如必填项未填)。
- 高级功能扩展
- 付费版支持A/B测试、高级分析;
- 企业版集成SSO登录、数据加密。
此流程图覆盖了问卷系统从创建到分析的核心业务闭环,可根据实际需求调整分支复杂度。
3 路由设计
3.1 页面对应的路由
- 首页:
/ - 登录:
/login - 注册:
/register - 问卷管理:
/manage- 我的问卷:
/manage/list - 星标问卷:
/manage/star - 回收站:
/manage/trash
- 我的问卷:
- 问卷详情:
/question- 编辑问卷:
/question/edit/:id - 问卷统计:
/question/stat/:id
- 编辑问卷:
- 404:访问不存在页面跳转404
3.2、Layout模版
Axure RP设计布局
Layout:布局,用于设置应用整体结构。
-
MainLayout:整体布局
-
头部
- 网站标题、log
- 首页导航
- 登录/注册、个人中心等
-
主体
- 左侧导航菜单
- 右侧内容
-
底部:
- 网站信息:备案、联系方式等
-
-
ManageLayout
-
QuestionLayout
4 实践
-
按设计,新建若干页面
-
为每个页面配置路由
-
分配对应的Layout模版
4.1 创建页面

- pages
- manage:问卷管理
- List.tsx:我的问卷
- List.module.scss:我的问卷样式
- Star.tsx:标星问卷
- Trash.tsx:回收站
- question:问卷详情
- Edit
- index.tsx:编辑问卷
- Stat
- index.tsx:问卷统计
- Edit
- Home.tsx:默认页
- Login.tsx:登录页
- NotFound.tsx:404跳转页
- Register.tsx:注册页
- manage:问卷管理
4.2 创建layout
- layouts
- MainLayout.tsx:主布局
- ManageLayout.module.scss:主布局样式
- ManageLayout.tsx:问卷管理布局
- QuestionLayout.tsx:问卷详情布局
4.3 配置router
- route
- index.tsx
代码如下所示:
import { createBrowserRouter } from "react-router-dom";import MainLayout from "../layouts/MainLayout";
import ManageLayout from "../layouts/ManageLayout";
import QuestionLayout from "../layouts/QuestionLayout";import Home from "../pages/Home";
import Login from "../pages/Login";
import Register from "../pages/Register";
import NotFound from "../pages/NotFound";
import List from "../pages/manage/List";
import Star from "../pages/manage/Star";
import Trash from "../pages/manage/Trash";
import Edit from "../pages/question/Edit";
import Stat from "../pages/question/Stat";const router = createBrowserRouter([{path: "/",element: <MainLayout />,children: [{path: "/",element: <Home />,},{path: "login",element: <Login />,},{path: "register",element: <Register />,},{path: "manage",element: <ManageLayout />,children: [{path: "list",element: <List />,},{path: "star",element: <Star />,},{path: "trash",element: <Trash />,},],},{path: "*",element: <NotFound />,},],},{path: "/question",element: <QuestionLayout />,children: [{path: "edit/:id",element: <Edit />,},{path: "stat/:id",element: <Stat />,},],},
]);export default router;
4.4 使用路由api-页面跳转和获取参数
页面跳转
- useNavigate
- Link
Home.tsx代码如下所示:
import { FC } from "react";
import { useNavigate, Link } from "react-router-dom";const Home: FC = () => {const nav = useNavigate();function clickHandler() {nav({pathname: "/login",search: "a=20",});}return (<div><p>Home</p><div><button onClick={clickHandler}>登录</button><Link to="/register">注册</Link></div></div>);
};export default Home;
传参和获取参数
传参参考上面示例,获取参数
- useParams
- useSearchParams
import { FC } from "react";
import { useParams } from "react-router-dom";const Edit: FC = () => {const { id = "" } = useParams();return <div>Edit {id}</div>;
};export default Edit;
import { FC } from "react";
import { useSearchParams } from "react-router-dom";
import { useImmer } from "use-immer";import QuestionCard from "../../components/QuestionCard";
import styles from "./List.module.scss";...const List: FC = () => {const [searchParams] = useSearchParams();console.log("keyword", searchParams.get("keyword"));...
};export default List;
4.5 自定义网页标题和favicon
修改首页index.html
<!doctype html>
<html lang="en"><head><meta charset="UTF-8" /><link rel="icon" href="/favicon.ico" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>问卷调查</title></head><body><div id="root"></div><script type="module" src="/src/main.tsx"></script></body>
</html>
使用第三方ahooks
...
import { useTitle } from "ahooks";
...const List: FC = () => {useTitle('调查问卷-我的问卷')
...
};export default List;
结语
❓QQ:806797785
⭐️仓库地址:https://gitee.com/gaogzhen
⭐️仓库地址:https://github.com/gaogzhen
相关文章:
0501路由-react-仿低代码平台项目
文章目录 1 react路由1.1 核心库:React Router安装 1.2 基本路由配置路由入口组件定义路由 1.3 导航方式使用 <Link> 组件编程式导航 1.4 动态路由参数定义参数获取参数 1.5 嵌套路由父路由配置子路由占位符 1.6 重定向与404页面重定向404页面 1.7 路由守卫&a…...
MySQL NULL 值处理
MySQL NULL 值处理 引言 在数据库管理系统中,NULL 值是一个非常重要的概念。在 MySQL 中,NULL 值代表未知、不存在或未定义的值。正确处理 NULL 值对于保证数据的准确性和完整性至关重要。本文将详细介绍 MySQL 中 NULL 值的处理方法,包括 …...
OpenAI即将上线新一代重磅选手——GPT-4.1
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
【蓝桥杯】赛前练习
1. 排序 import os import sysn=int(input()) data=list(map(int,input().split(" "))) data.sort() for d in data:print(d,end=" ") print() for d in data[::-1]:print(d,end=" ")2. 走迷宫BFS import os import sys from collections import…...
Windows 系统下用 VMware 安装 CentOS 7 虚拟机超详细教程(包含VMware和镜像安装包)
前言 资源 一、准备工作 (一)下载 VMware Workstation (二)下载 CentOS 7 镜像 二、安装 VMware Workstation(比较简单,按下面走即可) 三、创建 CentOS 7 虚拟机 四、安装 CentOS 7 系统…...
HTTP Content-Type:深入解析与应用
HTTP Content-Type:深入解析与应用 引言 在互联网世界中,数据传输是至关重要的。而HTTP协议作为最常用的网络协议之一,其在数据传输过程中扮演着关键角色。其中,HTTP Content-Type头字段在数据传输中发挥着至关重要的作用。本文将深入解析HTTP Content-Type,并探讨其在实…...
【AI+Java学习】AI时代Spring AI学习路径
在AI时代下,学习Spring AI需要结合其核心功能、生态系统和实际应用场景,以下是系统性学习路径及关键要点: 一、环境搭建与基础入门 开发环境配置 JDK与构建工具:确保安装JDK 17或更高版本,并配置Maven或Gradle作为项目…...
五、用例篇
Bug等级:崩溃、严重、一般、次要 bug的生命周期 面试高频考题:跟开发产生争执怎么办? (1)反思自己,是不是bug描述写的不清楚 (2)站在用户思考问题,反问开发人员:“如果你是用户,你能接受这样…...
【QT】学习笔记1
QT概述 Qt是一个1991年由QtCompany开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(…...
英伟达开源253B语言模型:Llama-3.1-Nemotron-Ultra-253B-v1 模型情况
Llama-3.1-Nemotron-Ultra-253B-v1 模型情况 1. 模型概述 Llama-3.1-Nemotron-Ultra-253B-v1 是一个基于 Meta Llama-3.1-405B-Instruct 的大型语言模型 (LLM),专为推理、人类对话偏好和任务(如 RAG 和工具调用)而优化。该模型支持 128K 令…...
质检LIMS系统在半导体制造行业的应用 半导体质量革命的现状
在半导体这个“工业皇冠上的明珠”领域,纳米级的精度要求与质量管控如同硬币的两面。随着芯片制程向3nm、2nm演进,传统质检模式已难以满足海量数据、复杂工艺的质量追溯需求。质检LIMS实验室系统作为质量管理的中枢神经,正在重构半导体制造的…...
面向对象高级(1)
文章目录 final认识final关键字修饰类:修饰方法:修饰变量final修饰变量的注意事项 常量 单例类什么是设计模式?单例怎么写?饿汉式单例的特点是什么?单例有啥应用场景,有啥好处?懒汉式单例类。 枚举类认识枚…...
HTTP 压力测试工具autocannon(AI)
简介 autocannon 是一款基于 Node.js 的高性能 HTTP 压力测试工具,适用于评估 Web 服务的并发处理能力和性能瓶颈。 一、工具特点 高性能:利用 Node.js 异步非阻塞机制模拟高并发请求。实时监控:测试过程中动态展示请求统计和性能…...
my2sql工具恢复误删数据
一、下载my2sql my2sql下载地址https://github.com/liuhr/my2sql/blob/master/releases/centOS_release_7.x/my2sql 二、my2sql工具注意事项 1. binlog格式必须为row,且binlog_row_imagefull 原因:binlog_row_image 参数决定了 binlog 中是否记录完整的…...
【AGI-Eval行业动态】OpenAI 语音模型三连发,AI 语音进入“声优”时代
前言:OpenAI又双叒叕搞事情了!这次他们带着三款全新语音模型强势来袭,直接让 AI 语音界卷出新高度!无论是语音识别的精准度、还是根据文字生成音频的脑洞,这三款模型都堪称“神仙打架”。 如果你还在用老掉牙的语音助手…...
蓝桥杯嵌入式十四届模拟一(eeprom)
一.LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 二.按键 按键配置,由原理图按键所对引脚要GPIO_Input 生成代码,在文件夹中添加code文件夹&#…...
ArcGis Reclassify CDL
1. 下载CDL CropScape - NASS CDL Program 2. 把CDL放入arcgis,导出表格,变成csv 3. 把cvs表格里的内容合并,分类成 agriculture developed open natural other water woods fruits 等 4.变成新的表格,导入gis使用recla…...
DevOps与功能安全:Perforce ALM通过ISO 26262合规认证,简化安全关键系统开发流程
本文来源perforce.com,由Perforce中国授权合作伙伴、DevSecOps解决方案提供商-龙智翻译整理。 近日,Perforce ALM(原Helix ALM)通过了国际权威认证机构 TV SD的ISO 26262功能安全流程认证!该认证涵盖Perforce ALM解决方…...
C++高精度算法(加、减、乘)
首先声明,没有除法是因为我不会(手动狗头_doge) 简介 顾名思义,高精度算法是用来算一些超级大的数,比如长到 longlong 都存不下的那种,还有就是小数点后好多位,double都存不下的那种ÿ…...
【图片识别改名工具】如何识别图片中文字内容,并根据文字对图片批量重命名批量改名,基于WPF和腾讯OCR的完整实现
办公场景 批量处理图片文件:用户有一批图片文件,图片中包含文字信息(如编号、日期、名称等),需要根据图片中的文字内容对图片进行重命名。自动化办公:在办公场景中,用户需要将图片文件按内容分类或归档,手动重命名效率低下,自动化工具可以大幅…...
Dify+DeepSeek能做出什么来?快速构建可扩展的 AI 应用
将 Dify(开源 LLM 应用开发平台)与 DeepSeek(深度求索公司的高性能大模型,如 DeepSeek-R1 或 DeepSeek-Lite)结合使用,可以充分发挥两者的优势,快速构建高效、灵活且可扩展的 AI 应用。以下是具…...
【深度学习】Ubuntu 服务器配置开源项目FIGRET(PyTorch、torch-scatter、torch-sparse、Gurobi 安装)
开源项目网址:https://github.com/FIGRET/figret 该项目在SIGCOMM2024发表,用深度学习方法处理流量工程中的突发问题 1. 创建新的 Conda 环境 使用国内镜像源创建环境 conda create -n figret python3.8.0 --override-channels -c https://mirrors.…...
浅析Centos7安装Oracle12数据库
Linux下的Oracle数据库实在是太难安装了,事贼多,我都怀疑能安装成功是不是运气的成分更高一些。这里虚拟机是VMware Workstation 15.5,操作系统是Centos7,Oracle版本是Oracle Database 12c Enterprise Edition Release 12.1.0.2.0…...
代码随想录算法训练营Day27 | Leetcode 56. 合并区间、738.单调递增的数字、968.监控二叉树
代码随想录算法训练营Day27 | Leetcode 56.合并区间、738.单调递增的数字、968.监控二叉树 一、合并区间 相关题目:Leetcode56 文档讲解:Leetcode56 视频讲解:Leetcode56 1. Leetcode56. 合并区间 以数组 intervals 表示若干个区间的集合&am…...
三大开源大模型应用框架深度对比:AnythingLLM、Dify 与 Open-WebUI
三大开源大模型应用框架深度对比:AnythingLLM、Dify 与 Open-WebUI 本文将全面解析三大主流开源大模型应用框架与Ollama的集成方案,帮助开发者根据实际需求选择最适合的工具。 一、框架概览与定位差异 1. AnythingLLM:企业级知识管理专家 …...
freertos低功耗模式简要概述
简介 FreeRTOS 的 Tickless 模式是一种特殊的运行模式,用于最小化系统的时钟中断频率,以降低功耗。在 Tickless 模式下,系统只在有需要时才会启动时钟中断,而在无任务要运行时则完全进入休眠状态,从而降低功耗。在滴答…...
ESP32S3 链接到 WiFi
以下是关于如何让 ESP32S3 连接到 WiFi 的完整流程和代码示例: ESP32S3 链接到 WiFi 1. 设置工作模式 ESP32 可以工作在两种模式下: Station (STA) 模式:作为无线终端连接到无线接入点(AP),类似于手机或…...
2024年博客之星的省域空间分布展示-以全网Top300为例
目录 前言 一、2024博客之星 1、所有排名数据 2、空间属性管理 二、数据抓取与处理 1、相关业务表的设计 2、数据抓取处理 3、空间查询分析实践 三、数据成果挖掘 1、省域分布解读 2、技术开发活跃 四、总结 前言 2024年博客之星的评选活动已经过去了一个月…...
vue项目引入tailwindcss
vue3项目引入tailwindcss vue3 vite tailwindcss3 版本 初始化项目 npm create vitelatest --template vue cd vue npm install npm run dev安装tailwindcss3 和 postcss 引入 npm install -D tailwindcss3 postcss autoprefixer // 初始化引用 npx tailwindcss init -p…...
蓝桥赛前复习2:一维差分二维差分
一维差分 问题描述 给定一个长度为 nn 的序列 aa。 再给定 mm 组操作,每次操作给定 33 个正整数 l,r,dl,r,d,表示对 al∼ral∼r 中的所有数增加 dd。 最终输出操作结束后的序列 aa。 Update:由于评测机过快,n,mn,m 于 2024…...
