【React】新建React项目

目录

  • 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问题,优化性能,进行服务器部署和老旧项目改造等。

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

在这里插入图片描述

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

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

相关文章

mac homebrew配置使用

本文介绍mac上homebrew工具的安装、配置过程。homebrew功能类似于centos的yum&#xff0c;用于软件包的管理&#xff0c;使用上有命令的差异。 本次配置过程使用mac&#xff0c;看官方文档&#xff0c;在linux上也可以用&#xff0c;但我没试过&#xff0c;有兴趣的同学可以试试…

第一次作业三种方式安装mysql(Windows和linux下)作业

在Windows11上安装sever&#xff08;服务&#xff09;端和客户端 server端安装 打开官网MySQL 进入到主页 点击DOWMLOAD 进入下载界面 点击下方MySQL Community (GPL) Downloads 进入社区版mysql下载界面 点击 MySQL Community Server 进入server端下载 选择8.4.3LTS&…

基于Media+Unity的手部位姿三维位姿估计

使用mediapipe Unity 手部位姿三维位姿估计 参考文章 基于Mediapipe的姿势识别并同步到Unity人体模型中 MediapipeUnity3d实现虚拟手_unity mediapipe-CSDN博客 需求 我的需求就是快速、准确的跟踪手部位姿并实现一个三维显示。 主要思路 搭建mdeiapipe系统&#xff0c…

【C++】IO 流

文章目录 &#x1f449;C 语言的输入与输出&#x1f448;&#x1f449;流是什么&#x1f448;&#x1f449;C IO 流&#x1f448;C 标准 IO 流C 和 C 语言的输入格式问题C 的多次输入内置类型和自定义类型的转换日期的多次输入C 文件 IO 流文本文件和二进制文件的读写 &#x1…

成功案例分享 — 芯科科技助力涂鸦智能打造Matter over Thread模块,简化Matter设备开发

芯科科技&#xff08;Silicon Labs&#xff09;的愿景之一是让开发者每天都能够更轻松地开发无线物联网&#xff08;IoT&#xff09;。特别是在拥有相同愿景的合作伙伴的帮助下&#xff0c;我们每天都在取得进步。但是要想弥合知识水平和物联网开发之间的差距仍会面临一定的挑战…

MySQL主从部署(保姆版)

一、mysql 同步复制有关概述 一般数据库都是读取压力大于写数据压力&#xff0c;主从复制即为了实现数据库的负载均衡和读写分离。通过将Mysql的某一台主机的数据复制到其它主机&#xff08;slaves&#xff09;上&#xff0c;主服务器只负责写&#xff0c;而从服务器只负责读。…

浅谈计算机网络02 | SDN控制平面

计算机网络控制平面 一、现代计算机网络控制平面概述1.1 与数据平面、管理平面的关系1.2 控制平面的发展历程 二、控制平面的关键技术剖析2.1 网络层协议2.1.1 OSPF协议2.1.2 BGP协议 2.2 SDN控制平面技术2.2.1 SDN架构与原理2.2.2 OpenFlow协议2.2.3 SDN控制器 一、现代计算机…

基于网络爬虫技术的网络新闻分析【源码+文档+部署讲解】

目 录 1 绪论 1.1 论文研究背景与意义 1.2 论文研究内容 2 系统需求分析 2.1 系统需求概述 2.2 系统需求分析 2.2.1 系统功能要求 2.2.2 系统IPO图 2.2 系统非功能性需求分析 3系统概要设计 3.1 设计约束 3.1.1需求约束 3.1.2设计策略 3.1.3 技术实现 3.3 模块…

WeakAuras NES Script(lua)

WeakAuras NES Script 修星脚本字符串 脚本1&#xff1a;NES !WA:2!TMZFWXX1zDxVAs4siiRKiBN4eV(sTRKZ5Z6opYbhQQSoPtsxr(K8ENSJtS50(J3D7wV3UBF7E6hgmKOXdjKsgAvZFaPTtte0mD60XdCmmecDMKruyykDcplAZiGPfWtSsag6myGuOuq89EVDV9wPvKeGBM7U99EFVVVV33VFFB8Z2TJ8azYMlZj7Ur3QDR(…

网络安全学习81天(记录)

前言&#xff1a; 小迪安全&#xff0c;81天&#xff0c;开始了php代码审计 思路&#xff1a; 内容&#xff1a; #知识点&#xff1a; 1、审计漏洞-SQL 数据库注入挖掘 1、审计思路-正则搜索&功能追踪&辅助工具 3、审计类型-常规架构&MVC 架构&三方框架 #章…

1.14 互斥与同步

1.思维导图 2.有一个隧道&#xff0c;长1000m&#xff0c;有一辆高铁&#xff0c;每秒100米&#xff1b;有一辆快车&#xff0c;每秒50米&#xff1b;要求模拟这两列火车通过隧道的场景。 1>程序代码&#xff1a; #include <stdio.h> #include <string.h> #i…

研华 PCI-1751 驱动更新导LabVIEW致程序异常

问题描述&#xff1a; 某 LabVIEW 程序长期运行正常&#xff0c;但在使用研华 PCI-1751 数据采集卡运行一段时间后&#xff0c;程序开始出现不正常的行为。具体过程如下&#xff1a; 初始问题&#xff1a; 更换新的 PCI-1751 板卡后&#xff0c;驱动程序被更新&#xff0c;但程…

基于微信小程序的游泳馆管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

LabVIEW智能水肥一体灌溉控制系统

本文详细介绍了一种基于LabVIEW的智能水肥一体灌溉控制系统的设计与实现。该系统采用模糊控制策略&#xff0c;能够自动调节土壤湿度和肥液浓度&#xff0c;满足不同作物在不同生长阶段的需求&#xff0c;有效提高水肥利用效率&#xff0c;对现代精准农业具有重要的实践和推广价…

ChordCraft荣获重要认可:推动全球音乐教育的数字化革新

2024年12月21日,洛杉矶尔湾市——在今年的文化艺术交流会上,聚集了来自各地的艺术家及社区领袖,共同探讨艺术如何促进全球文化的多样性和教育的普及。 张庭玮(Ting-Wei Chang)女士,University of North Texas音乐艺术博士,是一位享誉国际的单簧管演奏家和音乐教育者。她不仅在…

Public Key Retrieval is not allowed 解决方法

如图&#xff1a;我的报错是Public Key Retrieval is not allowed&#xff0c;我的前后端都能正常加载&#xff0c;但是在请求数据库时就会报错如下&#xff1a; 解决办法&#xff1a; 在 application.yaml 中的数据库设置地方加上allowPublicKeyRetrievaltrue&#xff0c;然后…

unity学习17:unity里的旋转学习,欧拉角,四元数等

目录 1 三维空间里的旋转与欧拉角&#xff0c;四元数 1.1 欧拉角比较符合直观 1.2 四元数 1.3 下面是欧拉角和四元数的一些参考文章 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 2.2 使用quaternion四元数,w,x,y,z 2.3 使用quaternion四元数,类 Vector3.zero 这种…

从 Conda 到 Pip-tools:Python 依赖管理全景探索20250113

从 Conda 到 Pip-tools&#xff1a;Python 依赖管理全景探索 引言 在 Python 开发中&#xff0c;依赖管理是一个"常见但复杂"的问题&#xff1a;一次简单的版本冲突可能让团队调试数小时&#xff1b;一次不受控的依赖升级可能让生产环境瘫痪。随着项目规模的增加和…

【容器逃逸实践】挂载/dev方法

0、前置知识 怎么在容器里面执行命令&#xff0c; 有几种方法 # 不进入容器&#xff0c;创建并启动一个新的容器 $ docker run -itd --name ubuntu-test ubuntu /bin/bash # 进入容器&#xff0c;创建并启动一个新的容器 $ docker run -itd --name ubuntu-test ubuntu /bin…

【Linux】进程结束和进程等待

进程的结束 退出码的认识 在我们学习C/C的时候我们通常在进行写main函数时&#xff0c;main函数主体写完后通常会进行写一条语句 " return 0 " &#xff0c;这里的这条语句到底是什么意思呢&#xff1f;&#xff1f; 我们知道当在主函数中调用其他函数或者在其他函…