react完整项目搭建的思路

react完整项目搭建的思路

  • react完整项目搭建的思路
    • 1.使用creacte-react-app初始化项目
    • 2.安装所需插件:路由、网络、样式、组件库
    • 3.reactjs目录结构组织
    • 4. 配置@路径别名
    • 4.配置路由
    • 5.网络配置,对axios进行封装
      • 》获取当前环境变量
    • 6.配置代理解决跨域
    • 7.配置使用iconfont
    • 8.状态管理

1.使用creacte-react-app初始化项目

  • 依赖安装create-react-app
npm install -g create-react-app
或是
yarn add -g create-react-app
  • 项目初始化
create-react-app my-app
  • 运行
yarn start

2.安装所需插件:路由、网络、样式、组件库

yarn add react-router-dom axios less-loader antd

react默认支持用scss,不支持less,直接使用less时会报错,因此当使用less的时候需要进行额外配置。至于技术选型选择less或scss完全取决于你的个人偏好。
less配置篇[推荐方法二]

早期并没有 React-Hooks 的加持,函数组件内部无法定义和维护 state,因此它还有一个别名叫“无状态组件”。
Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下,使用 state 以及其他的 React 特性。

由于官方对于函数式组件的支持越来越友好,建议使用函数式组件而非类式组件。这里我会使用函数式组件的的方式进行项目的构建,请跟上!node版本18.18.1,下图是项目相关依赖版本。
在这里插入图片描述

3.reactjs目录结构组织

https://www.zhihu.com/question/50750032

4. 配置@路径别名

1.看完以上的解决方式,你或许已经使用npm run eject将webpack暴露出来了,这时候你可以找到在文件config/webpack.config.js搜索alias关键词找到配置。
在这里插入图片描述

'@':path.resolve('src')

2.未暴露webpack.config.js配置文件的情况,使用craco插件实现,【请参考】

4.配置路由

可以参考

5.网络配置,对axios进行封装

参考,一些实际的内容可以根据实际需求修改代码。记住没有完美的axios封装方案,能用就行了。

以下为实际开发中产生的一些疑问。

》获取当前环境变量

在React应用中,获取运行环境(如开发环境、生产环境)通常涉及到对当前环境变量的检测。这通常在构建过程中由构建工具(如Webpack或Rollup)通过定义不同的环境变量来实现。以下是如何在React中获取运行环境的几种常见方法

使用process.env.NODE_ENV是一个全局变量,用于标识当前的运行环境。

if (process.env.NODE_ENV === 'development') {
  console.log('当前为开发环境');
} else if (process.env.NODE_ENV === 'production') {
  console.log('当前为生产环境');
}

6.配置代理解决跨域

当使用axios进行网络请求的时候出现了跨域问题
在这里插入图片描述

  • 最简单不过直接在src下增加一个setupProxy.js文件
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function (app) {
    app.use(
        '/api',
        createProxyMiddleware({
            target: 'http://127.0.0.1:8081',//后台服务地址以及端口号
            changeOrigin: true,//是否跨域
            pathRewrite: {   
            //使用代理, 首先需要有一个标识, 标明哪些连接需要使用代理,只有有标识的连接才用代理。”/api”就是告知,接口以”/api”开头的才用代理,所以写请求接口时要使用“/api/xx/xx”的形式,使用代理后生成的请求路径就是’http://localhost:8083/api/xx/xx’.
            //当实际需要请求的路径里面没有”/api“时. 就需要 pathRewrite,用’’^/api’’:’’, 把’/api’去掉, 这样既能有正确标识, 又能在请求到正确的路径。
                "^/api": "/"
            },
        })
    );
};
//以上!当发起网络请求的时候可以是
axios.get('/api/user').then(function (response) {})
  • 如果你按照我的节奏安装使用了craco插件,你可以直接在craco.config.js中修改配置。
//配置代理解决跨域
    devServer: {
        port:3000,
        proxy: {
            '/': {
                target: 'http://192.168.0.17:8002/',
                changeOrigin: true,
            },
        }
    },
  • 还有一些使用插件解决的放式,请参考解决,当然你也可以交给后端去处理跨域问题,嘻~

7.配置使用iconfont

下载iconfont包之后可以删除以下几个文件,然后将iconfont.css全局引入就可以使用了。
在这里插入图片描述

8.状态管理

推荐:

  1. 中小型项目使用 react自带的context;
  2. 复杂项目的状态管理:Rematch,Jotai,Hookstate。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

暗区突围steam叫什么 暗区突围无限steam上线时间测试申请预约教程

暗区突围steam叫什么 暗区突围无限steam上线时间 测试申请预约教程 最近暗区突围国际服的上线在游戏圈内引起了不小的波澜,这是一款由腾讯游戏开发的大逃杀类型游戏,玩家们需要在暗区内浴血搏杀,使用各种武器和道具活到最后,来取…

Linux系统中搭建Mosquitto MQTT服务并实现远程访问本地消息代理进行通信

文章目录 1. Linux 搭建 Mosquitto2. Linux 安装Cpolar3. 创建MQTT服务公网连接地址4. 客户端远程连接MQTT服务5. 代码调用MQTT服务6. 固定连接TCP公网地址7. 固定地址连接测试 今天和大家分享一下如何在Linux系统中搭建Mosquitto MQTT协议消息服务端,并结合Cpolar内网穿透工具…

Visual Source Safe 安装与使用教程

1.VSS 的工作原理: Microsott的 vss讲所有的项目源文件(包括各种文件类型)以特有的方式存入数据库。用户成员不能对该数据库中的文件进行直接的修改,而是由版本管理器将该项目的远程序或是子项目的程序拷贝到各个用户成员自己的工作目录下进行调试和修改,然后将修改后的项目…

OpenFeign修改HttpClient为Apache HttpClient 5

OpenFeign中http client 如果不做特殊配置,OpenFeign默认使用JDK自带的HttpURLConnection发送HTTP请求, 由于默认HttpURLConnection没有连接池、性能和效率比较低。所以修改为Apache HttpClient 5。 总结为两步: 加依赖改yml 具体操作请往…

OpenCV如何为等值线创建边界旋转框和椭圆(63)

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV 为轮廓创建边界框和圆(62) 下一篇:OpenCV的图像矩(64) 目标 在本教程中,您将学习如何: 使用 OpenCV 函数 cv::minAreaRect使用 OpenCV 函数 cv::fitEllipse cv::min…

【C++】学习笔记——string_2

文章目录 六、string类2. 反向迭代器const迭代器 string类对象的容量操作(补)size() 3. string类的元素访问4. string类的修改 未完待续 结合文档食用~ 六、string类 2. 反向迭代器 一般来说,迭代器都是正向的遍历容器,虽然可以…

Cmake的使用

一个c工程可能会涉及到很多的基础库,但是c不像python一样可以直接import,因此引入了Cmake,将多个库链接起来。 参考:CMake系列讲解 - 总目录(由浅入深,实例讲解)_cmake 项目目录-CSDN博客 【C】…

Unity类银河恶魔城学习记录 17-1,2 p166 Aliments fx p167 Blackhole additional vfx

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic; …

综合性练习(后端代码练习4)——图书管理系统

目录 一、准备工作 二、约定前后端交互接口 1、需求分析 2、接口定义 (1)登录接口 (2)图书列表接口 三、服务器代码 (1)创建一个UserController类,实现登录验证接口 &#xff…

OpenCV Mat对象与CImage对象间的数据传输实例

在用MFC写图像处理程序时,使用OpenCV可以做到事半功倍。但是,如果使用OpenCV4.0或OpenCV4.0以后版本,要显示图像可能会遇到麻烦,因为OpenCV去掉了原有的cvGetWindowHandle()函数,没法再用cvGetWindowHandle()函数来获取…

Linux进程管理与监控

一、相关概念 1、进程的的基本定义 在自身的虚拟地址空间运行的一个独立的程序,从操作系统的角度来看,所有在系统上运行的东西,都可以称为一个进程。 2、进程的分类 系统进程:可以执行内存资源分配和进程切换等管理工作&am…

C#知识|泛型集合List相关方法

哈喽,你好,我是雷工! 以下为泛型集合List相关方法的学习笔记。 01 集合定义 集合定义的时候,无需规定元素的个数。 02 泛型说明 泛型表示一种程序特性,也就是在定义的时候,无需指定特定的类型&#xff…

C语言嵌入Lua解释器的方法

Lua语言是一个轻量的脚本语言,可以用很少的资源运行其解释器 C语言是一个很常用的语言,广泛用于嵌入式等底层场景 这两个语言结合,可以应用于嵌入式等多个场景。比如,一些硬件公司会允许开发者使用Lua语言操作其硬件 Lua的安装…

搭建Kafka源码环境并测试

文章目录 一、前言二、环境准备三、环境搭建3.1 JDK 环境搭建3.2 Scala 环境搭建3.2.1 配置 Scala 环境变量3.2.2 验证 3.3 Gradle 环境搭建3.3.1 配置 Gradle 环境变量3.3.2 验证 3.4 Zookeeper 环境搭建3.4.1 配置 Zookeeper 环境变量3.4.2 验证 3.5 Kafka 源码搭建3.5.1 导入…

数据可视化宝典:Matplotlib图形实战

在数据分析领域,图形化展示数据是非常重要的环节。Python中的matplotlib库是绘制各类图形的强大工具。本文将介绍如何使用matplotlib绘制折线图、直方图、饼图、散点图和柱状图等数据分析中常见的图形,并附上相应的代码示例,可以当初matplotl…

【C++】——类和对象(初始列表,Static成员,友元)

创作不易,多多支持! !😘😘 前言 因为前面的构造函数还有些地方不够清晰,所以这里需要再继续补充一些 一 初始化列表 1.1认识初始化 对于默认的构造函数来说,我们都知道它是起到了初始化的…

3-4STM32C8T6按键控制LED开与关

实物接线如下: 为了代码的简洁性,这里需要对LED与KEY进行封装如下: #include "stm32f10x.h" // Device headervoid LED_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GP…

WSL2-Ubuntu使用Conda配置百度飞浆paddlepaddle虚拟环境

0x00 缘起 本文将介绍在WSL2-Ubuntu系统中,使用Conda配置百度飞浆paddlepaddle虚拟环境中所出现的各种问题以及解决方法,最终运行"run_check()"通过测试。 在WSL2中配置paddlepaddle不像配置Pytorch那样顺滑,会出现各种问题(如:库的文件缺失、不知道如何匹配C…

工厂模式和策略模式区别

工厂模式和策略模式都是面向对象设计模式,但它们的目的和应用场景有所不同。 工厂模式是一种创建型设计模式,旨在通过使用一个工厂类来创建对象,而不是直接使用new关键字来创建对象。这样做可以使系统更容易扩展和维护,因为新的对…

模型智能体开发之metagpt-单智能体实践

需求分析 根据诉求完成函数代码的编写,并实现测试case,输出代码 代码实现 定义写代码的action action是动作的逻辑抽象,通过将预设的prompt传入llm,来获取输出,并对输出进行格式化 具体的实现如下 定义prompt模版 …