从0开始搭建react项目

2023-10-31

一、项目创建+插件安装

前端项目的创建有三种方式:
参考https://juejin.cn/post/6844903953524588552

  1. 在html中引入react, react-dom,Babel(使浏览器识别JSX语法)等
  2. 使用官方脚手架create-react-app创建
  3. 使用Webpack创建
    个人认为第二种方式最简单,目前只介绍第二种方式

创建create-react-app脚手架

yarn global add create-react-app

创建react项目文件

npx create-react-app react-demo

启动后,可以通过3000端口进行访问

//Mac中自定义启动端口 Package.json文件中,将start命令中修改成 “PORT=1234 react-scripts start"

安装react的路由react-router-dom

yarn add react-router-dom —-save-dev

安装发送请求的axios.

yarn add axis

安装状态管理的react-redux

yarn add react-redux

二、设置项目目录结构

Api:接口文件
Components:相关组件文件
router:路由文件
static:静态资源文件
Store:react-redux状态管理文件
utils:各工具类文件
Views:页面视图层文件
在这里插入图片描述

三、配置按需加载(打包切片)

其他几种方式可以参考https://blog.csdn.net/qzf_hainenggaima/article/details/103163062

  1. 目的意义:
    单页应用只有一个html,一个主要的css,js 传统打包是全打包成一个文件后引入,用户每次浏览都需要将整个项目都拉下来,因此引入按需加载方式
  2. 简单高效的配置:
    通过webpack的import模块来实现按需加载

首先封装一个 异步加载模块 的组件asyncComponent.js,然后用该组件去引入要加载的模块

//异步加载组件
import React, {Component} from "react";

const asyncComponent = (importComponent) => {
    return class extends Component {

        constructor(){
            super();
            this.state = {
                component: null
            }
        }


        // 或者可以用async/await
        // async componentDidMount(){
        // const {default:component} = await importComponent();//解    构
        // this.setState({
        // component
        // });
        // }
        componentDidMount(){
            importComponent().then(cmp=>{
                this.setState({
                    //模块有default输出接口
                    component:cmp.default
                });
            })
        }


        render(){
            const Com = this.state.component;
            return Com ? <Com {...this.props}/> : null;
        }
    }
};


export default asyncComponent;

然后在router.js中使用 注意react-router-dom在v6以后的版本中将Switch删除了,代替使用Routes

参考https://stackoverflow.com/questions/69854011/matched-leaf-route-at-location-does-not-have-an-element

import asyncComponent from "../asyncComponent";
import {BrowserRouter, Routes, Route} from 'react-router-dom'

const App = asyncComponent(() => import('../App.js'))
const Login = asyncComponent(() => import('../views/login'))
const Register = asyncComponent(() => import('../views/register.js'))

const BasicRoute = () => (
    <BrowserRouter>
        <Routes>
            <Route path='/' exact element={<App/>}/>
            <Route path='/login' exact element={<Login/>}/>
            <Route path='/register' exact element={<Register/>}/>
        </Routes>
    </BrowserRouter>
)

export default BasicRoute;

还有另一种更简洁的方法是使用React.lazy搭配React.Suspense函数直接达到asyncComponnet的效果,还可以优化加载速度

Import React, {Suspense,lazy} from ‘react’;

const App =lazy(() => import('../App.js'))
const Login =lazy(() => import('../views/login'))
const Register =lazy(() => import('../views/register.js’))

const BasicRoute = () => (
    <BrowserRouter>
        <Suspense fallback={<div>Loding…</div>}>
            <Routes>
                <Route path='/' exact element={<App/>}/>
                <Route path='/login' exact element={<Login/>}/>
                <Route path='/register' exact element={<Register/>}/>
            </Routes>
        </Suspense>
    </BrowserRouter>
)

export default BasicRoute;

App.js

import './App.css';
import {Link} from 'react-router-dom';
import React from 'react';

class App extends React.Component {
    render() {
        return (
            <div>
                123
                <Link to='/login'>login</Link>
                <Link to='/register'>register</Link>
            </div>
        )
    }
}


export default App;

login.js

import React from "react”;

export default function Login(){
    return(
        <div>Login</div>
    )
}

最后在src/index.js文件中引入我们的路由文件router.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import BasicRoute from './router/router';
// import store from './store'

ReactDOM.render(
    <BasicRoute/>,
    document.getElementById('root')
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
// reportWebVitals();


//If you want your app to work offline and load faster,you can change
//unregister() to register() below.Note this.comes with some pitfalls.
//Learn more about service workers:http://bit.ly/CRA_PWA
// serviceWorker.unregister()

路由和路由的按需加载就ok了

执行yarn run build后查看build文件夹,可以看到build/static/js已经实现切片打包了
在这里插入图片描述

四、配置react-redux及redux-sagas

  1. Redux:react为单页面应用,当涉及到大量数据如用户信息时,组件中每次数据传输都很费力,利用redux可以实现将变量统一管理,就像件一个仓库,当每个组件需要数据时,直接通过仓库读取或修改这些数据就行,不用再传过来传过去了
  2. Redux-saga:redux的一个中间件,主要集中处理react架构中的异步处理工作,也可以不安装,按自己喜好来
    安装
yarn add redux -—save        //安装redux 
yarn add react-redux —save.  //安装react的绑定库
yarn add redux-saga          //安装sagas

写不完啦,下次分解

参考文章:
https://codeantenna.com/a/Q6CxihpQRP
https://www.1024sou.com/article/504944.html
https://blog.csdn.net/qzf_hainenggaima/article/details/103163062
https://www.jianshu.com/p/324fd1c124ad
https://cloud.tencent.com/developer/article/1680193
https://segmentfault.com/a/1190000010543507
https://www.appblog.cn/2019/06/22/React+Redux%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E6%B5%81%E7%A8%8B/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从0开始搭建react项目 的相关文章

随机推荐

  • 有关@string

    android label string app name gt 什么意思 有何作用 android label string app name gt 意思是应用的名称 还有一个是主活动的名称 label表示标签 表示引用 string a
  • 计算机视觉教程核心版(三)优化中篇反向传播展示

    目录 介绍 简单的表达式 模块化 反向传播中的模式 多个分支梯度相加 介绍 在本节中 我们将对反向传播 这是一种通过递归的应用链式法则计算梯度表达式的方法 进行直观而专业的理解 理解反向传播的过程以及其中的细节对我们理解 有效开发 设计和调
  • linux系统 nginx服务 多个vue项目配置-超详细

    linux系统 nginx服务 多个vue项目配置 超详细 linux系统 nginx服务 多个vue项目配置 超详 首先了解nginx路由配置注意事项 nginx安装 vue项目配置后缀 nginx安装配置 重启nginx服务 配置好后出
  • 市场火爆的NFT 应用场景分析与NFT开发技术搭建

    NFT 的应用 NFT 可以表征数字资产本身 也可用于表征某种特殊用途的凭证 房产证 护照 门票 优惠券等 因此它的使用场景是极其广泛的 当下主流的 NFT 应用为链上原生的游戏道具和艺术收藏 去中心化域名服务也是 NFT 的一个发展方向
  • Element-UI

    Element UI 组件 Tree 树形控件 用清晰的层级结构展示信息 可展开或折叠
  • 学习vue3系列computed

    响应式API中 computed 和之前的 computed 选项用法类似 对于任何复杂逻辑 我们都可能使用计算属性 比如翻转字符串
  • windows下secureCRT远程连接Linux错误

    描述 The server has disconnected with an error Server message reads A protocol error occurred The connection is closed by
  • MIPI D-PHY的初始化(MIPI Alliance & Xilinx)

    DPHY的基本介绍及使用已有很多文章 基本是基于 MIPI Alliance Specification for D PHY 的内容 学习时也以此为准 可参考CSDN上的文章 着重讲述MIPI D PHY的初始化部分 1 D PHY的功能及
  • 服务器2012系统磁盘压缩,windows10 部分文件夹自动勾选了“压缩内容以便节省磁盘空间”...

    您好 根据您的描述 在重启前能够正常取消压缩 但在重启后文件再次被压缩 说明系统功能和组件正常 很可能是某个应用影响了系统导致这个问题 请您仔细回忆下 您是在安装或更新了什么应用后出现该问题的 或使用了空间优化应用 请尝试将其关闭后 查看能
  • 基于Sqli-Labs靶场的SQL注入-54~65关

    目录 Less54 十步以内获取密钥 爆破数据库名 爆破表名 爆破列名 爆破字段值 Less55 十四步以内获取密钥 爆破数据库名 爆破表名 爆破列名 爆破字段值 Less56 十四步以内获取密钥 Less57 十四步以内获取密钥 Less
  • Linux Ubuntu下运行startx后的恢复办法

    解决办法 Alt Ctrl F3 进入控制台界面 提示登录时 输入你的Ubuntu用户名后回车 有密码的话 再输入密码 登录成功 cd 进入你的用户目录 rm rf Xauth 删除 Xauthority文件 Alt Ctrl F7 返回到
  • ROBO Pro的机械臂编程过程

    ROBO Pro是一种用于控制机械臂的软件 它可以使用图形化或文本化的编程方式 机械臂编程的过程大致如下 连接机械臂和电脑 打开ROBO Pro软件 选择合适的模板或创建新的项目 设计编程逻辑 可以使用拖拽或输入代码的方式 调试和运行程序
  • Java基础之static关键字

    目录 静态的特点 第一章 静态代码块 第二章 静态属性 第三章 静态方法 调用静态方法时 静态方法中调用非静态方法时 第四章 static关键字与其他关键字 友情提醒 先看文章目录 大致了解文章知识点结构 点击文章目录可直接跳转到文章指定位
  • GitHub仓库push报错remote: Support for password authentication was removed on August 13, 2021.

    发现GitHub项目从2021年8月13日开始已经不能使用用户名和密码push代码了 搜索了下 有以下两种方法可以尝试 记录一下 ssh 方式 先在电脑上生成ssh的加密公私钥 使用如下命令 命令中要将 C后面的参数设置为自己的github
  • windows文件保护服务器,Windows 文件保护功能的说明

    WFP 功能的工作方式 WFP 功能使用两种机制为系统文件提供保护 第一种机制在后台运行 在 WFP 收到受保护目录中的文件的目录更改通知后 就会触发这种保护机制 WFP 收到这一通知后 就会确定更改了哪个文件 如果此文件是受保护的文件 W
  • 深度学习十大框架比较

    框架比较 转 1 TensorFlow 对于那些听说过深度学习但还没有太过专门深入的人来说 TensorFlow 是他们最喜欢的深度学习框架 但在这里我要澄清一些事实 在 TensorFlow 的官网上 它被定义为 一个用于机器智能的开源软
  • Deeplabcut教程(一)安装(GPU&CPU版本)(纯新人向)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 Deeplabcut是什么 二 使用步骤 1 环境配置 1 1安装anaconda 1 2换源 1 2安装CUDA和CUdnn GPU 2 Deeplab
  • C++类的继承与派生

    一 基本概念 1 类的继承 是新的类从已有类那里得到已有的特性 或从已有类产生新类的过程就是类的派生 原有的类称为基类或父类 产生的新类称为派生类或子类 2 派生类的声明 class 派生类名 继承方式 基类名1 继承方式 基类名2 继承方
  • 罗技键盘蓝牙搜不到

    罗技K580蓝牙键盘 长按F11 F12在macbookpro 搜索不到 首先 按一下 fn esc 然后长按F11 F12 就可以搜到了
  • 从0开始搭建react项目

    一 项目创建 插件安装 前端项目的创建有三种方式 参考https juejin cn post 6844903953524588552 在html中引入react react dom Babel 使浏览器识别JSX语法 等 使用官方脚手架c