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

【React+Ts+Vite+AntDesign】从0到1基础项目搭建(动态路由)

新建项目

npm create vite

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置路由

项目根目录执行命令安装依赖

npm install react-router-dom

安装AntDesign

项目根目录执行命令安装依赖

npm install antd --save

至于使用AntDesign,就这一步就可以了,使用table举例:
官网:https://ant.design/components/table-cn
在这里插入图片描述

其他关键配置

src>新建router文件夹>新建index.tsx

// index.tsx
import { lazy, ComponentType } from 'react'// 动态路由部分
const pages = import.meta.glob('../pages/**/*.tsx')
const dynamicRoutes = Object.entries(pages).filter(([path]) => !path.includes('/components/')).map(([path, component]) => {const name = path.match(/\.\.\/pages\/(.*)\.tsx$/)?.[1]if (!name) return nulllet routePath = `/${name.toLowerCase()}`routePath = routePath.replace(/\/index$/, '').replace(/\[([^\]]+)\]/g, ':$1')if (routePath === '/index') routePath = '/'return {path: routePath,element: lazy(component as () => Promise<{ default: ComponentType<any> }>)}}).filter(Boolean)// 固定路由部分
const notView = lazy(() => import('../404'))
const Home = lazy(() => import('@/pages/Home/index'))
const staticRoutes = [{path: '/',element: Home},{path: '*',element: notView }
]
// 合并动态路由和固定路由
const routes = [...staticRoutes, ...dynamicRoutes]
export default routes

App.tsx

import { BrowserRouter, Routes, Route } from 'react-router-dom'
import routes from './router'
import { Suspense } from 'react'function App() {const safeRoutes = routes || []return (<BrowserRouter><div><Suspense fallback={<div>Loading...</div>}><Routes>{safeRoutes.map((route) =>route && <Route key={route.path} path={route.path} element={<route.element />} />)}</Routes></Suspense></div></BrowserRouter>)
}
export default App

src>新建pages文件夹
再新建Home文件夹>index.tsx

// src/pages/Home/index.tsx
import React from 'react';const Home: React.FC = () => {return <div>Home Page</div>;
};export default Home;

测试页面,能正常显示内容就ok。
后续所有跳转页面都在pages/目录
例:
在这里插入图片描述
这样就不用一个一个傻瓜式的写路由了,只需要管理文件,路由自动读取。
关于出现问题:

报错找不到模块“@/

修改vite.config.ts

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react-swc';
import { resolve } from 'path'export default defineConfig({plugins: [react()],resolve: {alias: {'@': resolve('./src'),},},
});

修改tsconfig.json

{"compilerOptions": {"baseUrl": "./", // 设置基础路径为当前目录"paths": { // 配置路径映射,@ 符号代表 src 目录"@/*": ["./src/*"]},"target": "ES2020", // 目标编译版本为 ES2020"useDefineForClassFields": true, // 允许类字段使用 defineProperty 进行定义"module": "ESNext", // 使用 ES 模块系统"lib": ["ES2020", "DOM", "DOM.Iterable"], // 编译时需要引入的库"skipLibCheck": true, // 跳过库文件的类型检查/* Bundler mode */"moduleResolution": "bundler", // 模块解析策略为 bundler"allowImportingTsExtensions": true, // 允许导入 TypeScript 扩展文件"resolveJsonModule": true, // 允许导入 JSON 模块"isolatedModules": true, // 确保每个文件都可以单独编译"noEmit": true, // 不生成输出文件"jsx": "preserve", // 保留 JSX 语法/* Linting */"strict": true, // 启用所有严格类型检查选项"noUnusedLocals": true, // 禁止未使用的局部变量"noUnusedParameters": true, // 禁止未使用的函数参数"noFallthroughCasesInSwitch": true // 禁止 switch 语句中存在空缺情况},"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] // 包含的文件类型
}

报错__dirname波浪线

执行代码

npm install @types/node --save-dev

在这里插入图片描述
感谢你的阅读,如对你有帮助请收藏+关注!
只分享干货实战精品从不啰嗦!!!
如某处不对请留言评论,欢迎指正~
博主可收徒、常玩QQ飞车,可一起来玩玩鸭~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 性能测试经典案例解析——远程培训系统
  • 傅里叶变换家族
  • Oracle Enterprise Manager:Oracle数据库管理的高效工具
  • 三菱机器人手柄维修示教器维修手操器面板等
  • 【Kubernetes知识点问答题】监控与升级 / ETCD 备份与恢复
  • df.write.csv
  • RK3399 android7.1 话柄电话功能
  • Datawhale X 李宏毅苹果书 AI夏令营 Task3 深度学习详解 -2 机器学习框架攻略
  • 探索 Logrus 日志框架:Go 语言的强大日志工具
  • 【WPS Excel】复制表格时,提示“图片太大,超过部份将被截去“ 问题
  • 提高开发效率的实用工具库VueUse
  • OPenCV结构分析与形状描述符(4)计算一个旋转矩形的四个顶点的函数boxPoints()的使用
  • 实时图像编辑大革新!Adobe发布TurboEdit:可以通过文本来编辑图像,编辑时间<0.5秒!
  • 11.2.软件系统分析与设计-数据库分析与设计
  • C语言-数据结构 无向图普里姆Prim算法(邻接矩阵存储)
  • Google 是如何开发 Web 框架的
  • canvas绘制圆角头像
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • httpie使用详解
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript对象详解
  • Mocha测试初探
  • PHP CLI应用的调试原理
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • webgl (原生)基础入门指南【一】
  • Web设计流程优化:网页效果图设计新思路
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 你不可错过的前端面试题(一)
  • 你真的知道 == 和 equals 的区别吗?
  • 微信小程序填坑清单
  • 项目实战-Api的解决方案
  • NLPIR智能语义技术让大数据挖掘更简单
  • 阿里云重庆大学大数据训练营落地分享
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #{}和${}的区别是什么 -- java面试
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (3)nginx 配置(nginx.conf)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (libusb) usb口自动刷新
  • (web自动化测试+python)1
  • (windows2012共享文件夹和防火墙设置
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)计算机毕业设计高校学生选课系统
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (六)DockerCompose安装与配置
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)基于IDEA的JAVA基础10
  • (一)认识微服务
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .Net Core和.Net Standard直观理解
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net组件程序设计之线程、并发管理(一)
  • .so文件(linux系统)
  • @RestController注解的使用