搭建react全家桶

article/2025/11/6 20:18:22

1.安装react项目

①使用webpack安装

npx create-react-app my-app
cd my-app
npm start

②使用vite安装

创建Vite项目

npm create vite@latest my-vue-app --template react
cd my-app
npm run dev

配置vite.config.js

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'export default defineConfig({plugins: [react()],resolve: {alias: {'@': path.resolve(__dirname, './src')}},server: {host: 'localhost',port: 8080,open: true,proxy: {'/api': {target: '后端接口域名',changeOrigin: true,rewrite: (path) => path.replace(/^\/api/, ''),}}}
})

下面安装以VITE+REACT项目为基础

2.安装scss

npm install sass sass-resources-loader --save

安装完插件即可使用,不需要在vite.config.js配置

使用:

components/test/index.scss (新创建scss文件)

.content{background: red;
}

components/test/index.jsx

import React from "react";
import './index.scss'export default class Test extends React.Component {constructor(props){super(props)}render(){return (<div class="content"><div>测试组件</div></div>)}
}

jsx文件直接引入对应的scss文件即可

3.安装路由

npm i react-router-dom --save

方式一:

main.jsx

import React from 'react'
import ReactDOM from 'react-dom/client'
import { BrowserRouter, Routes } from "react-router-dom";
import App from './App'ReactDOM.createRoot(document.getElementById('root')).render(<React.StrictMode><BrowserRouter><App /></BrowserRouter></React.StrictMode>
)

App.jsx

import { Routes} from "react-router-dom";
import routes from '@/router/index'function App() {return (<Routes>{routes}</Routes>)
}export default App

创建router/index.jsx文件

import { Route, Navigate } from "react-router-dom";
import Index from '@/pages/index.jsx'export default [<Route key="Navigate" path="*" element={<Navigate to="/"/>} />,//重定向到首页<Route key="Index" path="/" element={ <Index/>} />
]

方式二(推荐):使用useRoutes

main.jsx

import React from 'react'
import ReactDOM from 'react-dom/client'
import { BrowserRouter } from "react-router-dom";
import App from './App'ReactDOM.createRoot(document.getElementById('root')).render(<React.StrictMode><BrowserRouter><App /></BrowserRouter></React.StrictMode>
)

App.jsx

import { useRoutes } from "react-router-dom";
import routes from '@/router/index.jsx'function App() {const element = useRoutes(routes);return (<>{element}</>)
}export default App

创建router/index.jsx

import { Navigate  } from 'react-router-dom'
import Index from '@/pages/index'const router = [{path: "/",element: <Index />,children: [// 二级路由...]},// 配置路由重定向 可配置404页面{path: '*',element: <Navigate to='/' />}
]export default router

路由配置后只需要创建pages/index.jsx页面即可使用

import React from 'react'export default function Index(){return (<div>我是首页</div>)
}

*注意如果是vite+react项目,因为是jsx文件,这块不能使用class只能以函数形式表示页面

这时候即可根据路由访问页面了

http://127.0.0.1:8080/

4.使用axios

安装axios

npm install axios --save

创建utils/request.js

import axios from 'axios'// create an axios instance
const service = axios.create({baseURL: import.meta.env.VITE_APP_BASE_API, // url = base url + request urlwithCredentials: true, // send cookies when cross-domain requeststimeout: 5000 // request timeout
})// request interceptor
service.interceptors.request.use(config => {// 做一些请求前置,例如添加token// config.headers['token'] = getToken()return config},error => {console.log(error)return Promise.reject(error)}
)// response interceptor
service.interceptors.response.use(response => {const res = response.data// if the custom code is not 200, it is judged as an error.if (res.code !== 200) {// 配置响应拦截return Promise.reject(new Error(res.msg || '网络异常,请稍后~'))} else {return res}},error => {console.log(error)return Promise.reject(error)}
)export default service

添加环境变量文件

.env.development

NODE_ENV = 'development'
VITE_APP_ENV = 'development'
VITE_APP_BASE_API = '接口请求的域名'

.env.production

NODE_ENV = 'production'
VITE_APP_ENV = 'production'
VITE_APP_BASE_API = '接口请求的域名'

使用环境变量

import.meta.env.VITE_APP_BASE_API

*环境变量需要VITE_APP前缀,而且每次添加变量需要重新启动

使用utils/request.js

import request from '@/utils/request'
// 其他引入文件
export default class Index extends React.Component{constructor(props) {super(props)request.get('/article/getAll').then(res => {console.log(res)})}render(){// 模板}
}

5.使用redux

官方文档:https://cn.redux.js.org/tutorials/quick-start/

npm install @reduxjs/toolkit react-redux --save

修改main.jsx文件

/* 其他引入的js不变,只是新增这2个插件 */
import store from '@/store/index'
import { Provider } from 'react-redux'ReactDOM.createRoot(document.getElementById('root')).render(<React.StrictMode><Provider store={store}><BrowserRouter><App /></BrowserRouter></Provider></React.StrictMode>
)

创建store/index.js文件

import { configureStore } from "@reduxjs/toolkit";// configureStore 创建一个 redux 数据
const store = configureStore({reducer: {},
});export default store;

创建store/modules/counterSlice.js测试文件(官方例子)

import { createSlice } from '@reduxjs/toolkit'export const counterSlice = createSlice({name: 'counter',initialState: {value: 0},reducers: {increment: state => {// Redux Toolkit 允许我们在 reducers 写 "可变" 逻辑。它// 并不是真正的改变状态值,因为它使用了 Immer 库// 可以检测到“草稿状态“ 的变化并且基于这些变化生产全新的// 不可变的状态state.value += 1},decrement: state => {state.value -= 1},incrementByAmount: (state, action) => {state.value += action.payload}}
})
// 每个 case reducer 函数会生成对应的 Action creators
export const { increment, decrement, incrementByAmount } = counterSlice.actions
export default counterSlice.reducer

将counterSlice挂载到store/index.js里面

/* 其他引入的插件不需要变,新增这个引入 */
import counterReducer from '@/store/modules/counterSlice'// configureStore 创建一个 redux 数据
const store = configureStore({reducer: {counter: counterReducer},
});
export default store;

使用redux

pages/index.jsx

import { useSelector, useDispatch } from 'react-redux'
import { decrement, increment } from '@/store/modules/counterSlice'export default function Index(){const count = useSelector(state => state.counter.value)const dispatch = useDispatch()return (<div><div><buttonaria-label="Increment value"onClick={() => dispatch(increment())}>Increment</button><span>{count}</span><buttonaria-label="Decrement value"onClick={() => dispatch(decrement())}>Decrement</button></div></div>)
}

最终的文件目录如下

6.使用ant-design UI框架

npm install antd --save

安装完然后直接引入组件使用就可以

pages/antd.jsx

import { DatePicker } from 'antd';export default () => {return (<DatePicker />)
}


http://chatgpt.dhexx.cn/article/fqfVE7bR.shtml

相关文章

React 全家桶

文章目录 前言一、React是什么&#xff1f;二、基础内容1. React 相关 js 库2. React 开发者调试工具3. JSX语法规则4. 模块与组件、模块化与组件化5. 类的基本知识 三、React 面向组件编程1. 函数式组件2. 类式组件3. 组件实例的三个核心属性&#xff1a; state、refs、props-…

React全家桶

文章目录 第1章&#xff1a;React入门1.1. React简介1.1.1. 官网1.1.2. 介绍描述1.1.3. React的特点1.1.4. React高效的原因 1.2. React的基本使用1.2.1. 效果1.2.2. 相关js库1.2.3. 创建虚拟DOM的两种方式1.2.4. 虚拟DOM与真实DOM 1.3. React JSX1.3.1. 效果1.3.2. JSX1.3.3. …

react全家桶有哪些?(详细)

一 、 create-react-app脚手架 对于现在比较流行的三大框架都有属于自己的脚手架&#xff08;目前这些脚手架都是使用node编写的&#xff0c;并且都是基于webpack的&#xff09;&#xff1a; Vue的脚手架&#xff1a;vue-cliAngular的脚手架&#xff1a;angular-cliReact的脚手…

React全家桶详细讲解-图文并茂

文章目录 前言一、React-表单处理受控组件使用步骤多表单元素优化非受控组件 二、React-组件综合案例需求分析搭建任务的模板渲染列表添加任务删除任务 三、React-组件进阶组件通讯介绍组件的props 四、react-组件通讯的三种方式react-父组件传递数据给子组件react-子组件传递数…

【尚硅谷React】——React全家桶笔记

文章目录 第1章 React简介1.1 React的特点1.2 引入文件1.3 JSX1.3.1 为什么要用JSX1.3.2 JSX语法规则 1.4 虚拟DOM1.5 模块与组件1.5.1 模块1.5.2 组件 第2章 React面向组件编程2.1 创建组件2.1.1 函数式组件2.1.2 类式组件 2.2 组件实例的三大属性2.2.1 state属性2.2.2 props属…

React全家桶(收藏吃灰必备!)

文章目录 ECMAScript61、ES6简介1.1、什么是ES61.2、ECMAScript和JavaScript的关系1.3、为什么要学习ES6&#xff1f; 2、ES6环境搭建2.1、前期准备2.2、ES6环境搭建 3、let与const3.1、let命令3.2、const命令 4、ES6解构赋值4.1、解构赋值概述4.2、解构模型4.3、数组的解构赋值…

Neurosynth元分析——认知解码工具,软件包安装以及使用

Neurosynth元分析——认知解码工具,软件包安装以及使用 NeuroSynth 基本简介基本原理例子Neurosynth package安装及使用创建虚拟环境安装Dependencies:安装neurosynthNeurosynth使用加载必要的包下载neurosynth数据参考如上图所示。NeuroSynth 元分析感兴趣的区域沿功能连接梯…

编码和解码

概念 字符的三种形态 图片来自&#xff1a;https://zhuanlan.zhihu.com/p/25435644 编码&#xff1a;将字符转为字节序列&#xff08;abcdefg-------------> 0101010…10010&#xff09; 解码&#xff1a;将字节序列转为字符&#xff08;1001010…10010110------> abcd…

编码器和解码器

1.编码器—解码器&#xff08;seq2seq&#xff09; 编码器的作用是把一个不定长的输入序列变换成一个定长的背景变量c&#xff0c;并在该背景变量中编码输入序列信息。常用的编码器是循环神经网络。 编码器可以是一个单向的循环神经网络&#xff0c;每个时间步的隐藏状态只取决…

二维码解码工具

http://tool.chinaz.com/qrcode/?jdfwkeyweexu

编解码工具

支持各种文件摘要&#xff08;Hash&#xff09;、Base64编码、Hex编码、国密sm2加密、Rsa加密&#xff0c;以及各种对称加密算法的小工具 下载地址&#xff1a;https://pan.baidu.com/s/1AJwUaVizzk5HeLa_8Q5AqA 提取码&#xff1a;4567

编码与解码

什么是编码与解码 电脑是由电路板组成&#xff0c;电路板里面集成了无数的电阻和电容&#xff0c; 交流电经过电容的时候&#xff0c;电压比较低 记为低电平 &#xff0c; 用0表示&#xff0c;交流电流过电阻的时候&#xff0c;电压比较高&#xff0c;记为高电平&#xff0c;用…

Encoder编码器、Decoder解码器

知乎用户对编码器解码器的理解 Encoder&#xff1a; 本身其实就是一连串的卷积网络。该网络主要由卷积层&#xff0c;池化层和BatchNormalization层组成。卷积层负责获取图像局域特征&#xff0c;池化层对图像进行下采样并且将尺度不变特征传送到下一层&#xff0c;而BN主要对…

Protobuf在线解码工具推荐

P1: CyberChef 地址&#xff1a;CyberChef 非常灵活&#xff0c;支持各种导入格式可以直接转成json支持导入.proto文件 P2: protobuf-decoder 地址&#xff1a;protobuf-decoder 有对齐问题 P3: protogen 地址&#xff1a;protogen 有乱码问题 P4: PB-JCE-Decoder&…

在线JWT Token解析解码工具

1&#xff1a;JWT Token在线解析解码 - ToolTT在线工具箱 2&#xff1a; 3&#xff1a;

密码解码常用工具网站汇总

xssee:http://web2hack.org/xssee xssee:http://evilcos.me/lab/xssee 在线编码解码(多种并排):http://bianma.911cha.com 在线加密解密(多种):http://encode.chahuo.com Unicode转中文:http://www.bejson.com/convert/unicode_chinese 栅栏密码 && 凯撒密码 &&…

URL在线编码/解码工具

一刀工具箱提供在线URL编码解码工具:对网址Url进行UrlEncode编码转换,UrlEncode编码,UrlDecode解码。 代码片段 methods:{convertEncode(){this.item encodeURIComponent(this.value)},convertDecode(){this.item decodeURIComponent(this.value);}} URL在线编码/解码工具 …

URL 编码和解码工具

简介 本文简要介绍一款编解码工具&#xff0c;它支持URL编码和解码、Base64编码和解码。 官网地址&#xff1a;https://smart-tools.cn/dev/encoder/app 背景 URL编码 URL编码是浏览器发送数据给服务器时使用的编码。它是编码算法&#xff0c;而不是加密算法。其目的是把任…

HTK 3.5解码工具HVITE独立工程(Visual Studio Code实现)

HTK3.5支持DNN HTK3.5支持DNN了&#xff0c;本来想做一个HMMDNN的模型&#xff0c;作为HMMGMM的对比。但是HTK不支持实时的HMMDNN解码。原因有两个。 HTK不支持实时的计算MFCC_0_D_A_Z的特征&#xff0c;即无法实时计算出特征空间的均值。HTK不支持实时的DNN或者HMMDNN的解码…

全自动解密解码神器 — Ciphey

Ciphey 是一个使用自然语言处理和人工智能的全自动解密/解码/破解工具。 简单地来讲&#xff0c;你只需要输入加密文本&#xff0c;它就能给你返回解密文本。就是这么牛逼。 有了Ciphey&#xff0c;你根本不需要知道你的密文是哪种类型的加密&#xff0c;你只知道它是加密的&…