React+Vite从零搭建项目及配置详解

news2025/3/10 11:21:28

相信很多React初学者第一次搭建自己的项目,搭建时会无从下手,本篇适合快速实现功能,熟悉React项目搭建流程。

目录

一、创建项目react-item

二、调整项目目录结构

三、使用scss预处理器

四、组件库Ant Design

五、配置基础路由

六、配置别名路径


一、创建项目react-item

npm create vite react-item

二、调整项目目录结构

-src
  -apis           项目接口函数
  -assets         项目资源文件,比如,图片等
  -components     通用组件
  -pages          页面组件
  -store          集中状态管理
  -utils          工具,比如,token、axios 的封装等
  -App.js         根组件
  -index.css      全局样式
  -index.js       项目入口

三、使用scss预处理器

SASS是一种预编译的 CSS,支持一些比较高级的语法,可以提高编写样式的效率,CRA接入scss非常简单只需要我们装一个sass工具

1. 安装解析 sass 的包

npm i sass -D

2. 创建全局样式文件:index.scss

四、组件库Ant Design

Ant Design(简称 Antd)是一个企业级的 UI 设计语言和 React 组件库,由 Ant Financial(蚂蚁金服)团队开发和维护。它旨在为开发者提供一套设计精美、功能完善的前端组件

官方网站:

Ant Design of React - Ant Design

1. 安装 antd 组件库

npm i antd

2. 在App.jsx中导入 Button 组件测试

import { Button } from 'antd'
import './App.css'

function App() {
  return (
    <>
      <Button type='primary'>按钮</Button>
    </>
  )
}

export default App

 成功:

五、配置基础路由

1. 安装路由包 

npm i react-router-dom

2. 准备 Home和 About俩个基础组件

一级路由:

// src/pages/Home.jsx
import { Outlet, Link } from 'react-router-dom';

const Home = () => {
    return (
        <div>
            <nav>
                <ul>
                    <li><Link to="/home/section1">侧边栏1</Link></li>
                    <li><Link to="/home/section2">侧边栏2</Link></li>
                </ul>
            </nav>

            {/* 渲染嵌套路由的内容 */}
            <Outlet />
        </div>
    );
}

export default Home;
// src/pages/About.jsx
const About = () => {
    return (
        <div>
            <h2>关于</h2>

        </div>
    );
}

export default About;

二级路由 Section1和Section2

// src/pages/Section1.jsx
const Section1 = () => {
    return (
        <div>
            <h3>Section 1 Content</h3>
            <p>This is the content of Section 1.</p>
        </div>
    );
}

export default Section1;
// src/pages/Section2.jsx
const Section2 = () => {
    return (
        <div>
            <h3>Section 2 Content</h3>
            <p>This is the content of Section 2.</p>
        </div>
    );
}

export default Section2;

3. 配置路由

App.jsx

// src/App.jsx
import { BrowserRouter as Router, Route, Routes, Link } from 'react-router-dom';
import Home from './pages/Home';
import About from './pages/About';
import Section1 from './pages/Section1';
import Section2 from './pages/Section2';

const App = () => {
  return (
    <Router>
      <div>
        {/* 主导航栏 */}
        <nav>
          <ul className='tab'>
            <li><Link to="/home">首页</Link></li>
            <li><Link to="/about">关于</Link></li>
          </ul>
        </nav>

        {/* 路由配置 */}
        <Routes>

          <Route path="home" element={<Home />}>
            {/* 二级路由配置 */}
            <Route path="section1" element={<Section1 />} />
            <Route path="section2" element={<Section2 />} />
          </Route>
          <Route path="about" element={<About />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

  • BrowserRouter:用于包裹整个应用程序,开启前端路由的功能。在这里使用了别名 Router,目的是让路由能够通过 URL 来导航页面而不刷新整个页面。
  • Route:定义路由规则,指定 URL 路径和对应的组件。
  • Routes:包裹所有的 Route,用于配置和管理路由规则。
  • Link:用于创建应用程序内的导航链接,通过点击链接来进行页面导航。
  • Router 是 React Router 的核心组件,负责包裹整个应用程序,管理页面的路由逻辑。
  • <Outlet />:用来渲染嵌套路由的内容。在 Home 组件中,当访问 /home/section1 或 /home/section2 时,这部分内容会被渲染到 <Outlet /> 所在的位置。

六、配置别名路径

1. 安装craco工具包

Create React App 是一个非常流行的工具,用于快速构建 React 应用。它提供了一些开箱即用的配置,如 Webpack、Babel、ESLint、Prettier 等。然而,这些配置默认是隐藏的,用户无法直接修改它们。如果你需要自定义 Webpack 或其他工具的配置,就需要执行 eject 操作。

问题:eject 的缺点
  • 执行 eject 后,所有的配置文件都会暴露出来并且变得可以修改,但这也意味着你需要管理和维护这些文件,增加了复杂度。
  • 一旦 eject,就无法恢复,也无法享受 Create React App 后续版本的自动更新和修复。
解决方案:CRACO

CRACO 提供了一种无需执行 eject 即可自定义配置的方法,它通过修改 CRA 的默认配置来满足你的需求,同时保持 CRA 的内部配置自动管理。

npm i @craco/craco -D

2. 根目录增加 `craco.config.js` 配置文件

const path = require('path')

module.exports = {
  // webpack 配置
  webpack: {
    // 配置别名
    alias: {
      // 约定:使用 @ 表示 src 文件所在路径
      '@': path.resolve(__dirname, 'src')
    }
  }
}

3. 修改 `scripts 命令`

这个配置保留了 craco 作为主要的开发工具来启动、构建和测试项目,并且通过 eject 保留了传统的暴露配置的方式,允许开发者在需要时完全控制项目的配置。

在package.json中:

"scripts": {
  "start": "craco start",
  "build": "craco build",
  "test": "craco test",
  "eject": "react-scripts eject"
}

4. 测试是否生效

import Login from '@/pages/Login'
import Layout from '@/pages/Layout'

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

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

相关文章

JDK21 虚拟线程:能完全代替传统线程吗?聊聊 Web 应用中的场景适配

虚拟线程到底是个什么东西&#xff1f; 虚拟线程的出现&#xff0c;可以说是 Java 并发编程的一次“大手术”。本质上&#xff0c;它是对 线程模型的抽象和轻量化&#xff1a; 传统线程&#xff1a;由操作系统管理&#xff0c;每个线程需要分配较大的栈空间&#xff08;通常 …

《Vue3实战教程》13:Vue3侦听器

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 侦听器​ 基本示例​ 计算属性允许我们声明性地计算衍生值。然而在有些情况下&#xff0c;我们需要在状态变化时执行一些“副作用”&#xff1a;例如更改 DOM&#xff0c;或是根据异步操作的结果去修改另一处的状态。…

Intel(R) Iris(R) Xe Graphics安装Anaconda、Pytorch(CPU版本)

一、Intel(R) Iris(R) Xe Graphics安装Anaconda 下载网址&#xff1a;https://repo.anaconda.com/archive/ 双击Anaconda3-2024.10-1-Windows-x86_64&#xff0c;一直下一步&#xff0c;选择安装的路径位置&#xff0c;一直下一步就安装完成了。打开Anaconda PowerShell Promp…

如何在NGINX中实现基于IP的访问控制(IP黑白名单)?

大家好&#xff0c;我是锋哥。今天分享关于【如何在NGINX中实现基于IP的访问控制&#xff08;IP黑白名单&#xff09;&#xff1f;】面试题。希望对大家有帮助&#xff1b; 如何在NGINX中实现基于IP的访问控制&#xff08;IP黑白名单&#xff09;&#xff1f; 1000道 互联网大…

16.springcloud_openfeign之父子容器

文章目录 前言springcloud中的父子容器基础知识了解springcloud提供父子容器的支持springcloud_openfeign对父子容器的应用 总结 前言 在前面springcloud_openfeign的文章中了解到FeignClientsRegistrar在扫描到满足条件的feign接口后会生成BeanDefinition并注入到spring上下文…

写入hive metastore报问题Permission denied: user=hadoop,inode=“/user/hive”

背景 使用Doris创建hive catalog后&#xff0c;想在hive上的库中创建一个表&#xff0c;报如下图片错误 解决办法 hdfs dfs -ls /看到如下图片所示&#xff0c;只有root用户有写的权限 所以通过export HADOOP_USER_NAMEroot将hadoop的用户名改成root&#xff0c;然后再hdfs…

【AI图像生成网站Golang】项目测试与优化

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与优化 六、项目测试与优化 在开发过程中&#xff0c;性能优化是保证项目可扩展性和用户体验的关键步骤。本文将详细介绍我如何使用一…

单节点calico性能优化

在单节点上部署calicov3273后&#xff0c;发现资源占用 修改calico以下配置是资源消耗降低 1、因为是单节点&#xff0c;没有跨节点pod网段组网需要&#xff0c;禁用overlay方式网络(ipip&#xff0c;vxlan),使用route方式网络 配置calico-node的环境变量 CALICO_IPV4POOL_I…

Redis 中 IntSet 底层数据结构

IntSet 底层数据结构 序言: 像字符串 SDS 只是保存了一个变量的值&#xff0c;但是像 Redis 中也是需要保存一些集合元素的&#xff0c;这里就介绍一下其中一种集合 IntSet&#xff0c;由于是 Set 所以也有 Set 的一些特性&#xff0c;不过也多加了一些特性&#xff1a; ● 唯…

Java——网络编程(下)

(UDP通讯的实现) 1 UDP通信介绍 (面向无链接的一个传输协议——>不会创建连接——>效率高) (发送数据要经行封包操作——>使用DatagramPacket类——>底层是UDP) (DatagramPacket——>数据封包——>发送数据和接收数据都要去包装对象&#xff01;&#xf…

《Django 5 By Example》读后感

一、 为什么选择这本书&#xff1f; 本人的工作方向为Python Web方向&#xff0c;想了解下今年该方向有哪些新书出版&#xff0c;遂上packt出版社网站上看了看&#xff0c;发现这本书出版时间比较新(2024年9月)&#xff0c;那就它了。 从2024年11月11日至2024年12月18日期间&…

基于Spring Boot的校园商城系统

一、系统背景与意义 随着互联网技术的快速发展&#xff0c;电子商务已经渗透到生活的方方面面。校园作为一个相对封闭但活跃的社群&#xff0c;同样需要一个专门的线上平台来满足其特殊的需求。基于Spring Boot的校园商城系统正是为此目的而设计&#xff0c;它结合了微服务架构…

感知机收敛性定理证明

1. 问题描述 感知机收敛性定理假设&#xff1a; 存在一个参数向量 θ&#xff08;被归一化为单位向量&#xff0c;&#xff0c;以及一个正数 &#xff0c;使得对所有训练样本 满足&#xff1a; 这是线性可分的假设&#xff0c;意味着每个样本点与正确超平面之间有一个至少为的…

ai绘图丨中国新年春节背景第二弹(附关键词

使用工具&#xff1a;千鹿AI 咒语&#xff1a;圆形平面讲台&#xff0c;5 个礼品盒和台灯交错排列&#xff0c;红色背景上的圆形&#xff0c;中国唐朝风格&#xff0c;红色和金色主题&#xff0c;3D 效果图&#xff0c;摄影棚灯光&#xff0c;简约产品展示模型&#xff0c;逼真…

深度学习每周学习总结J9(Inception V3 算法实战与解析 - 天气识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结Inception V1 简介Inception V3 简介1. 设置GPU2. 导入数据及处理部分3. 划分数据集4. 模型构建部分5. 设置超参数&#xff1…

Restaurants WebAPI(一)—— clean architecture

文章目录 项目地址一、Restaurants.Domain 核心业务层1.1 Entities实体层1.2 Repositories 数据操作EF的接口二、Restaurants.Infrastructure 基础设施层2.1 Persistence 数据EF CORE配置2.2 Repositories 数据查询实现2.3 Extensions 服务注册三、Restaurants.Application用例…

道路运输企业安全生产管理人员安全考核试题

道路运输企业安全生产管理人员安全考核试题 一、单选题 题干&#xff1a;在公交车行驶过程中&#xff0c;乘客王某因与驾驶员发生矛盾&#xff0c;遂殴打驾驶员并抢夺方向盘&#xff0c;造成其他乘客受轻微伤&#xff0c;依照《中华人民共和国刑法》的规定&#xff0c;王某触…

FFmpeg库之ffplay

文章目录 FFmpeg环境搭建ffplay使用通用选项视频选项音频选项快捷键使用滤镜直播拉流 FFmpeg环境搭建 FFmpeg官网 FFmpeg环境搭建 ./configure \--prefix"$HOME/ffmpeg" \--extra-cflags"-I$HOME/ffmpeg/include" \--extra-ldflags"-L$HOME/ffmpeg…

HTTP 协议报文结构 | 返回状态码详解

注&#xff1a;本文为 “HTTP 历史 | 协议报文结构 | 返回状态码” 相关文章合辑。 未整理去重。 HTTP 历史 wangjunliang 最后更新: 2024/3/16 上午10:29 超文本传输协议(英语:HyperTextTransferProtocol,缩写:HTTP)是 万维网(World Wide Web)的基础协议&#xff61;自 蒂姆…

springboot444新冠物资管理系统的设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装新冠物资管理系统软件来发挥其高效地信息处理的作用&#x…