【React】新建React项目

news2025/1/16 21:21:43

目录

  • create-react-app基础运用
  • React核心依赖
  • React 核心思想:数据驱动
  • React 采用 MVC体系
  • package.json
  • index.html
  • 好书推荐

官方提供了快速构建React 项目的脚手架: create-react-app ,目前使用它安装默认是19版本,我们这里降为18版本。

create-react-app基础运用

1、安装脚手架

//mac前面要设置sudo
 npm i create-react-app -g  

2、查看版本

 create-react-app --version

3、新建React项目,项目名称要遵循npm包命名规范:使用“数字、小写字母、_”命名

create-react-app 项目名称

4、项目目录

      |- node_modules
      |- src:所以后续编写的代码,几乎都放在SRC下「打包的时候,一般只对这个目录下的代码进行处理」
         |- index.js
      |- public:放页面模板
         |- index.html
      |- package.json
      |- 

React核心依赖

在React项目中,会默认安装下面的依赖:

  • react:React框架的核心
  • react-dom:React视图渲染的核心,其主要基于React构建WebApp(HTML页面)
  • react-scripts:脚手架为了让项目目录看起干净一些,把webpack打包的规则及相关插件/loader等都隐藏到了node_modules目录下,react-scripts就是脚手架中自己对打包命令的一种封装,基于它打包,会调用node_modules中的webpack等进行处理!!

React 核心思想:数据驱动

React核心思想:不在直接去操作DOM,而是改为“数据驱动思想”。然后操作DOM的思想:操作DOM比较消耗性能「主要原因就是:可能会导致DOM重排(回流)/重绘」,也比较麻烦。

数据驱动思想:

  • 不会直接操作DOM
  • 我们去操作数据「当我们修改了数据,框架会按照相关的数据,让页面重新渲染」
  • 框架底层实现视图的渲染,也是基于操作DOM完成的
    • 构建了一套 虚拟DOM->真实DOM 的渲染体系
    • 有效避免了DOM的重排/重绘
  • 开发效率更高、最后的性能也相对较好

React 采用 MVC体系

在这里插入图片描述

React框架采用的是MVC体系;Vue框架采用的是MVVM体系;

MVC:model数据层 + view视图层 + controller控制层

  • React中是基于jsx语法来构建视图的
  • 构建数据层:在视图中,需要“动态”处理的(需要变化的,不论是样式还是内容),我们都要有对应的数据模型
  • 控制层:当我们在视图中(或者根据业务需求)进行某些操作的时候,都是去修改相关的数据,然后React框架会按照最新的数据,重新渲染视图,以此让用户看到最新的效果!

总结:
1、数据驱动视图的渲染!!
2、视图中的表单内容改变,想要修改数据,需要开发者自己去写代码实现!!
3、“单向驱动”

MVVM:model数据层 + view视图层 + viewModel数据/视图监听层

  • 数据驱动视图的渲染:监听数据的更新,让视图重新渲染
  • 视图驱动数据的更改:监听页面中表单元素内容改变,自动去修改相关的数据

总结: “双向驱动”

package.json

其中scripts中的属性:

 "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  • start: 用于开发环境,启动本地 Web 服务器。
  • build: 用于生产环境,生成静态资源文件,输出到 dist 目录。
  • test: 用于运行单元测试。
  • eject: 暴露 Webpack 配置文件,供开发者自定义。
 "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }

在这里插入图片描述

browserslist 用于指定项目需要兼容的浏览器范围,通常被工具如 AutoprefixerBabel 使用,以确保 CSS 和 JavaScript 能够适配所选的浏览器环境。比如:

使用场景:

  1. postcss-loader + autoprefixer

    • 根据指定的浏览器环境自动添加 CSS 前缀(如 -webkit--ms- 等)。
    • 确保 CSS 属性兼容旧版本浏览器。
  2. babel-loader

    • 将 ES6+ 代码转译为目标浏览器支持的 ES5 代码。

属性配置:

  1. browserslist 字段:包含两个环境配置:productiondevelopment

  2. production 环境

    • ">0.2%":支持全球使用率超过 0.2% 的浏览器。
    • "not dead":排除不再维护或不更新的浏览器(如 IE)。
    • "not op_mini all":不考虑 Opera Mini 浏览器。
  3. development 环境

    • "last 1 chrome version":仅支持最新的一个 Chrome 版本。
    • "last 1 firefox version":仅支持最新的一个 Firefox 版本。
    • "last 1 safari version":仅支持最新的一个 Safari 版本。

production 配置中,通过规则如 "not dead""not ie <= 8",明确排除了低版本的 IE 浏览器(包括 IE 8 及以下)。若需要兼容低版本 IE,可以在配置中添加如下规则:

"browserslist": {
  "production": [
    ">0.2%",
    "last 2 versions",
    "not ie <= 8"
  ],
  "development": [
    "last 1 chrome version",
    "last 1 firefox version",
    "last 1 safari version"
  ]
}

全部的package.json如下:

{
  "name": "demo",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-scripts": "5.0.1",
    "web-vitals": "^2.1.4" // 性能检测工具
  },
  // 打包命令是基于 react-scripts 处理的
  "scripts": {
    "start": "react-scripts start", // 开发环境:在本地启动 Web 服务器,预览打包内容
    "build": "react-scripts build", // 生产环境:打包部署,打包的内容输出到 dist 目录
    "test": "react-scripts test",   // 单元测试
    "eject": "react-scripts eject"  // 暴露 Webpack 配置,可以修改默认配置
  },
  // 对 Webpack 中 ESLint 词法检测的相关配置
  // 词法检测
  // - 词法错误(不符合标准规范)
  // - 不符合标准(代码本身不报错,但不符合 ESLint 的检测规范)
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  // 基于 browserlist 规范设置浏览器的兼容情况
  // - postcss-loader + autoprefixer 会给 CSS3 设置相关的前缀
  // babel-loader 会把 ES6 编译为 ES5
  "browserslist": {
    "production": [
      ">0.2%",          // 使用率超过 0.2% 的浏览器
      "not dead",       // 不考虑 IE
      "not op_mini all" // 不考虑欧朋浏览器
    ],
    "development": [ // 不兼容低版本和 IE 浏览器
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}


index.html

public目录下会生成index.htmlindex.html 是 React 项目的静态模板文件,public目录用于存放不会被打包的静态资源,而 %PUBLIC_URL% 提供了动态路径占位功能,在构建过程中被替换为public 目录的路径。
在这里插入图片描述

好书推荐

《微前端之道,从理论到实践》:链接直达

全面介绍微前端技术:本书涵盖微前端的各个方面,包括微前端的起源与发展、适用场景、解决的问题、缺点以及解决方案,让读者对微前端有一个全面的了解。
深入剖析微前端解决方案:《微前端之道:从理论到实践:视频教学版》详细介绍iframe方案、动态script方案、webComponent以及社区微前端解决方案,并通过实例来帮助读者更好地理解和应用。结合实践:《微前端之道:从理论到实践:视频教学版》不仅介绍微前端的基础知识,还结合实践,手把手地指导读者如何构建微前端项目,解决SSR问题,优化性能,进行服务器部署和老旧项目改造等。

适合各类读者:无论是对前端开发感兴趣的初学者,还是已经有一定经验的开发人员,甚至是项目经理,都可以从《微前端之道:从理论到实践:视频教学版》中获得宝贵的经验和知识。

在这里插入图片描述

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

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

相关文章

Jmeter数据库

jmeter之操作数据库 一、下载jdbc 驱动&#xff0c;安装jdbc驱动 2、将驱动存放在4个路径下 &#xff08;1&#xff09;C:\Program Files\Java\jre1.8.0_60\lib &#xff08;2&#xff09;第二个存放的包 C:\Program Files\Java\jre1.8.0_60\lib\ext &#xff08;3&#xf…

nginx: [emerg] bind() to 0.0.0.0:80 failed 端口被占用

nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions) 查看被占用的端口 被系统占用了 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/HTTP 然后再进入nginx文件夹目录下…

《C++11》深入剖析正则表达式库:解锁文本处理的高效之道

在现代编程领域&#xff0c;文本处理是一项不可或缺的任务&#xff0c;而正则表达式无疑是这一领域的强大利器。C11标准库的引入&#xff0c;为C开发者带来了正则表达式库&#xff0c;极大地丰富了C在文本处理方面的能力。本文将全方位、多角度地深入探讨C11正则表达式库&#…

c语言----------内存管理

内存管理 目录 一。作用域1.1 局部变量1.2 静态(static)局部变量1.3 全局变量1.4 静态(static)全局变量1.5 extern全局变量声明1.6 全局函数和静态函数1.7 总结 二。内存布局2.1 内存分区2.2 存储类型总结2.3内存操作函数1) memset()2) memcpy()3) memmove()4) memcmp() 2.4 堆…

机器学习-归一化

文章目录 一. 归一化二. 归一化的常见方法1. 最小-最大归一化 (Min-Max Normalization)2. Z-Score 归一化&#xff08;标准化&#xff09;3. MaxAbs 归一化 三. 归一化的选择四. 为什么要进行归一化1. 消除量纲差异2. 提高模型训练速度3. 增强模型的稳定性4. 保证正则化项的有效…

STC的51单片机LED点灯基于KEIL

前言&#xff1a; 该文源于回答一个朋友的问题&#xff0c;代码为该朋友上传&#xff0c;略作修改&#xff0c;在此说明问题以及解决问题的思路&#xff0c;以减少新手错误。 电路图&#xff1a; 该位朋友未上传电路图&#xff0c;说明如下&#xff1a; stc8g1k08a-sop8控制…

手撕Transformer -- Day6 -- DecoderBlock

手撕Transformer – Day6 – DecoderBlock 目录 手撕Transformer -- Day6 -- DecoderBlockTransformer 网络结构图DecoderBlock 代码Part1 库函数Part2 实现一个解码器Block&#xff0c;作为一个类Part3 测试 参考 Transformer 网络结构图 Transformer 网络结构 DecoderBlock 代…

【功能测试总结】

功能测试 1. 功能测试用例1.1 设计用例容易出现的问题 2. 如何写用例2.1 什么是好的用例2.2 测试用例设计常见方法 3. 用例分级 1. 功能测试用例 1.1 设计用例容易出现的问题 基础功能点用例覆盖不全/描述不清 描述不清 什么是正常内容&#xff0c;仅看用例能否知道该输入什么…

Mac玩Steam游戏秘籍!

Mac玩Steam游戏秘籍&#xff01; 大家好&#xff01;最近有不少朋友在用MacBook玩Steam游戏时遇到不支持mac的问题。别担心&#xff0c;我来教你如何用第三方工具Crossover来畅玩这些不支持的游戏&#xff0c;简单又实用&#xff01; 第一步&#xff1a;下载Crossover 首先&…

基于Springboot + vue实现的旅游网站

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

题解 CodeForces 430B Balls Game 栈 C/C++

题目传送门&#xff1a; Problem - B - Codeforceshttps://mirror.codeforces.com/contest/430/problem/B翻译&#xff1a; Iahub正在为国际信息学奥林匹克竞赛&#xff08;IOI&#xff09;做准备。有什么比玩一个类似祖玛的游戏更好的训练方法呢&#xff1f; 一排中有n个球…

Vue3播放视频报ReferenceError: SharedArrayBuffer is not defined

解决办法 前端本地测试vue.config.js server: {headers: {"Cross-Origin-Opener-Policy": "same-origin","Cross-Origin-Embedder-Policy": "require-corp",}, }, 后端vue.js生产环境 跨域隔离 是一种现代Web安全策略&#xff0c;…

Android BottomNavigationView不加icon使text垂直居中,完美解决。

这个问题网上千篇一律的设置iconsize为0&#xff0c;labale固定什么的&#xff0c;都没有效果。我的这个基本上所有人用都会有效果。 问题解决之前的效果&#xff1a;垂直方向&#xff0c;文本不居中&#xff0c;看着很难受 问题解决之后&#xff1a;舒服多了 其实很简单&…

微调神经机器翻译模型全流程

MBART: Multilingual Denoising Pre-training for Neural Machine Translation 模型下载 mBART 是一个基于序列到序列的去噪自编码器&#xff0c;使用 BART 目标在多种语言的大规模单语语料库上进行预训练。mBART 是首批通过去噪完整文本在多种语言上预训练序列到序列模型的方…

基于32QAM的载波同步和定时同步性能仿真,包括Costas环的gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…

设计模式-工厂模式/抽象工厂模式

工厂模式 定义 定义一个创建对象的接口&#xff0c;让子类决定实列化哪一个类&#xff0c;工厂模式使一个类的实例化延迟到其子类&#xff1b; 工厂方法模式是简单工厂模式的延伸。在工厂方法模式中&#xff0c;核心工厂类不在负责产品的创建&#xff0c;而是将具体的创建工作…

【机器学习】零售行业的智慧升级:机器学习驱动的精准营销与库存管理

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 在当今数字化浪潮汹涌澎湃的时代&#xff0c;零售行业正站在转型升级的十字路口。市场竞争的白热化使得企业必须另辟蹊径&#xff0…

day_2_排序算法和树

文章目录 排序算法和树排序算法算法稳定性排序算法☆ 冒泡排序冒泡思路冒泡步骤代码实现效率优化 ☆ 选择排序排序思路排序步骤代码实现 ... 树01-树的基本概念02-树的相关术语03-二叉树的种类04-二叉树的存储05-树的应用场景_数据库索引06-二叉树的概念和性质07-广度优先遍历0…

蓝桥杯刷题第二天——背包问题

题目描述 有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是Vi价值是Wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&#xff0c;N&#xff0c;V&am…

Linux x86_64 程序动态链接之GOT 和 PLT

文章目录 前言一、动态链接二、位置无关代码三、GOT 和 PLT3.1 GOT3.2 PLT3.3 延时绑定3.4 示例 四、demo演示五、延迟绑定技术和代码修补参考资料 前言 这篇文章描述了&#xff1a;Linux x86_64 程序静态链接之重定位&#xff0c;接来本文描述Linux x86_64 程序动态链接之GOT…