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

【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 null
    let 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飞车,可一起来玩玩鸭~


http://www.kler.cn/a/301817.html

相关文章:

  • 超全超详细使用SAM进行高效图像分割标注(GPU加速推理)
  • 容器内的Jenkins使用docker部署服务,服务数据文件挂载问题
  • MySQL:表设计
  • 数据结构-二叉树及其遍历
  • 源码解析-Spring Eureka(更新ing)
  • K8S containerd拉取harbor镜像
  • 【Python报错已解决】AttributeError: ‘str‘ object has no attribute ‘read‘
  • python学习之字符串操作
  • Spring统一功能+SpringAOP
  • 黑马头条第八天实战(上)
  • 【oj刷题】滑动窗口篇:滑动窗口的应用场景和注意事项
  • RTMP和WebRTC使用场景有哪些差别?
  • Anaconda 安装与使用教程
  • js TypeError: Cannot read property ‘initialize’ of undefined
  • SQL命令大全---超细【保姆级】
  • QT界面中的区域以及图像大小,想随着QT界面的放大缩小变化,如何实现?
  • 故障处理系列】elasticsearch 索引未正常分片导致集群状态异常如何分析处理
  • 【超详细】Plaxis软件简介、 Plaxis Python API环境搭建、自动化建模、Python全自动实现、典型岩土工程案例实践应用
  • YOLOV3实现越界检测——智能安防
  • 使用 Visual Studio Code 配置 C/C++ 开发环境
  • 无人机之遥控器工作频率篇
  • Java | Leetcode Java题解之第392题判断子序列
  • FreeRTOS学习笔记(十一)内存管理
  • 计算机的错误计算(九十一)
  • Python中的内存池机制
  • php实现Socket 编程