【React】React入门

news/2024/11/29 8:57:06/

目录

  • 一、何为React
  • 二、React与传统MVC的关系
  • 三、React的特性
    • 1、声明式编程
      • ①、实现标记地图
    • 2、高效灵活
    • 3、组件式开发(Component)
      • ①、函数式组件
      • ②、类组件(有状态组件)
      • ③、一个组件该有的特点
    • 4、单向式响应的数据流
  • 四、虚拟DOM
    • 1、传统DOM更新
      • ①、举例讲解
    • 2、虚拟DOM
      • ①、举例讲解
  • 五、创建React项目并编写React第一个应用程序
    • 1、创建React项目
      • ①、在目标文件下cmd进行创建
      • ②、成功结果说明
      • ③、运行项目
    • 2、编写React第一个应用程序
  • 六、React和Vue的区别
  • 七、如何在React和Vue中进行选择
    • 1、项目需求和复杂度
    • 2、团队经验和技能
    • 3、社区生态和支持
    • 4、性能和体积
  • 八、总结

一、何为React

  1. 是一个用于构建用户界面的JavaScript库
  2. 起源于Facebook的内部项目,用来架设Instagram的网站,并于2013年5月开源
  3. 采用组件化的开发模式,将用户拆分成独立的可复用的组件,通过组件的组合和数据的单向流向来构建复杂的用户界面

二、React与传统MVC的关系

React不是一个完整的MVC框架,最多可以认为是MV中的V(View)。React构建页面UI的库,可以简单地理解为:React将界面分成了各个独立地小块,每一个块就是组件,这些组件之间可以组合、嵌套,就成了我们的页面
在这里插入图片描述

三、React的特性

1、声明式编程

声明式编程是一种编程范式,它关注的是你要做什么,而不是如何做
它表达逻辑而不显式地定义步骤。这意味着我们需要根据逻辑的计算来声明要显示的组件。

①、实现标记地图

通过命令式创建地图、创建标记、以及在地图上添加的标记的步骤如下:

// 创建地图
const map = new Map.map(document.getElementById('map'), {zoom: 4,center: {lat,lng}
});// 创建标记
const marker = new Map.marker({position: {lat, lng},title: 'Hello Marker'
});// 地图上添加标记
marker.setMap(map);

而用React实现上述功能则如下:

<Map zoom={4} center={lat, lng}><Marker position={lat, lng} title={'Hello Marker'}/>
</Map>

声明式编程方式使得React组件很容易使用,最终的代码简单易于维护

2、高效灵活

react可以与已知的框架或者库配合,它通过对DOM的模拟,可以最大限度上减少与DOM的交互

3、组件式开发(Component)

在上边也提到了:在React中,一切皆为组件。通常将应用程序的整个逻辑分解为小的单个部分。我们将每个单独的部分称为组件。

组件可以是一个函数或者是一个类,接受数据输入,处理它并返回在UI中呈现的React元素

①、函数式组件

const Header = () => {return(<Jumbotron style={{backgroundColor:'orange'}}><h1>TODO App</h1></Jumbotron>)
}

②、类组件(有状态组件)

class Dashboard extends React.Component {constructor(props){super(props);this.state = {}}render() {return (<div className="dashboard"> <ToDoForm /><ToDolist /></div>);}
}

③、一个组件该有的特点

  1. 可组合:各个组件易于和其他组件一起使用,或者嵌套在另一个组件内部
  2. 可重用:每个组件都是具有独立功能的,它可以被使用在多个UI场景
  3. 可维护:每个小的组件仅仅包含自身的逻辑,更容易被理解和维护

4、单向式响应的数据流

react比传统的数据绑定更为简单,因为它实现了单向响应的数据流,很大程度上减少了代码的重复

四、虚拟DOM

1、传统DOM更新

真实页面对应一个DOM树,在传统页面的开发模式中,每次需要更新页面时,都要手动操作DOM来进行更新
在这里插入图片描述

①、举例讲解

当我们在微信朋友圈进行下拉刷新时,会有新发的内容。这时出现一个场景:我们拉取的朋友圈数据至少有100条,这时有个人在下拉刷新这一瞬间把刚发的朋友圈内容删除了,那么作为一个开发人员,应如何应对呢??

在这里插入图片描述

假如我们之前从后端返回来的数据是100条,而现在,后端返回来的是99条数据。那么,在这块页面中,最简单的方法应该怎么做?

按照之前的老办法是:先清空,再动态创建99条数据,那么大家想想:如果一直按照先清空,再动态创建99条树的话,那浏览器会不会崩溃??为了解决浏览器崩溃的情况,我们可以使用虚拟DOM

2、虚拟DOM

在前端开发中,性能消耗最大的就是DOM操作,而且这部分代码会让整体项目的代码变得难以维护。React中,在基建层会统一把我们编写的代码先编译成JavaScript对象树,存在内存里,然后再进一步映射成真实DOM。每次数据更新后,重新计算Virtual DOM,并和上一次生成的Virtual DOM做对比(Diff),对发生变化的部分做批量更新,减少低效操作
在这里插入图片描述

①、举例讲解

在这里插入图片描述

五、创建React项目并编写React第一个应用程序

1、创建React项目

①、在目标文件下cmd进行创建

npx create-react-app reactdemo  //reactdemo为创建的项目名称,可任意取名

在这里插入图片描述

②、成功结果说明

在这里插入图片描述

③、运行项目

npm start

2、编写React第一个应用程序

react开发需要引入多个依赖文件:react.js、react-dom.js,分别又有开发版本和生产版本,在创建React项目时,已经安装完了。然后需要把工程目录下的src目录清空,在里边重新创建一个index.js

//从react的包当中引入了React。只要你要写React.js组件就必须引入React,因为react里有一种语法叫JSX
import React from 'react'
//ReactDOM可以帮助我们把React组件渲染到页面上去
import ReactDOM from 'react-dom'//ReactDOM里有一个render方法,就是把组件渲染并且构造DOM树,然后插入到页面上某个特定的元素上
ReactDOM.render(<h1>好好学习,天天向上</h1>,document.getElementById("root")
)

六、React和Vue的区别

Vue和React都是流行的前端框架,它们有以下不同点:

在这里插入图片描述

总的来说,Vue更加简单易学,适合中小型项目或者追求快速开发的团队;React更加灵活和高效,适合大型项目或者有一定经验的前端开发者

七、如何在React和Vue中进行选择

在考虑使用Vue还是React时,需要考虑以下几个方面:

1、项目需求和复杂度

如何项目需求快速构建,并且组件较为简单、数据流不太复杂,那么可以选择Vue;如果项目涉及到大规模复杂的组件开发以及高度可定制的数据流管理,那么React可能更适合

2、团队经验和技能

如果团队中已有经验丰富的Vue或React开发人员,那么可以优先选择他们熟悉的框架。否则,可以评估团队技能并选择相应的框架

3、社区生态和支持

Vue和React在社区方面都拥有强大的支持和生态,但React更受欢迎,因此可以考虑选择React框架,因为它在社区的支持和解决问题方面可能更强大

4、性能和体积

Vue框架的性能和体积相对较小,因此对于需要快速加载页面和处理大量数据的项目来说,Vue可能更好一些。而对于需要更灵活的代码组织结构以及更好的代码复用性的项目来说,React可能更适合

总之,选择Vue还是React需要全面考虑项目需求、团队技能、社区支持和性能体积等方面,并根据具体情况权衡利弊,选择最适合项目的框架

八、总结

以上就是我们对React的初步认识,包括React的概念、基础知识、如何创建React项目、编写React应用程序,以及一些基本的操作。接下来,还会不断地更新有关React的学习内容。


http://www.ppmy.cn/news/1112939.html

相关文章

【python爬虫—星巴克产品】

文章目录 需求爬取星巴克产品以及图片&#xff0c;星巴克菜单 python爬虫爬取结果 需求 爬取星巴克产品以及图片&#xff0c;星巴克菜单 网页分析&#xff1a; 首先&#xff0c;需要分析星巴克官方网站的结构&#xff0c;了解菜单栏的位置、布局以及菜单项的标签或类名等信息…

【自用】深度学习工作站安装ubuntu 18.04 LTS系统

工作站配置&#xff1a; 自己组装的 主板&#xff1a;华硕Z790P&#xff08;PCIE插槽间距大&#xff0c;可以装双显卡&#xff09; CPU&#xff1a;i5 13600KF 内存&#xff1a;32 G 显卡&#xff1a;GTX 2080 Ti &#xff08;魔改版&#xff0c;22G&#xff09; 存储&#xf…

office mac苹果办公软件安装包安装教程详解

软件下载 软件&#xff1a;mac office版本&#xff1a;2021语言&#xff1a;简体中文大小&#xff1a;4.27G安装环境&#xff1a;mac硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道 百度网盘 https://pan.baidu.com/s/1WGSB-icELUxweFkI8iIbzA 首先&#…

改进YOLOv5小目标检测:构建多尺度骨干和特征增强模块,提升小目标检测

构建多尺度骨干和特征增强模块,提升小目标检测 背景代码使用配置文件如下🔥🔥🔥 提升小目标检测,创新提升 🔥🔥🔥 测试在小目标数据集进行提点 👉👉👉: 新设计的创新想法,包含详细的代码和说明,具备有效的创新组合 🐤🐤🐤 1. 本文包含两个创新改…

Vulnhub实战-DC9

前言 本次的实验靶场是Vulnhub上面的DC-9&#xff0c;其中的渗透测试过程比较多&#xff0c;最终的目的是要找到其中的flag。 一、信息收集 对目标网络进行扫描 arp-scan -l 对目标进行端口扫描 nmap -sC -sV -oA dc-9 192.168.1.131 扫描出目标开放了22和80两个端口&a…

记录一些奇怪的报错

错误&#xff1a;AttributeError: module distutils has no attribute version 解决方案&#xff1a; 第一步&#xff1a;pip uninstall setuptools 第二步&#xff1a;conda install setuptools58.0.4 错误&#xff1a;ModuleNotFoundError: No module named _distutils_hac…

基于WMI更新Windows系统信息采集程序sysInfo的一些收获

一、网络安全至关重要 没有网络安全就没有国家安全。 当下正值2023年国家网络安全宣传周&#xff08;9月11日至17日&#xff09;在全国范围举行&#xff0c;而第20届中国—东盟博览会也在9月16日至19日在广西南宁举行&#xff0c;网络安全检测和保障至关重要。 二、编写sysI…

408数据结构算法题目

408数据结构算法题目 408数据结构算法题目一、2020-411.1 题目描述1.2 分析1.3 代码1.3.1 暴力美学1.3.2 贪心 408数据结构算法题目 一、2020-41 1.1 题目描述 2020-41 41.(13分&#xff09; 定义三元组&#xff08;a,b,c)(a,b,c均为正数&#xff09;的距离D|a-b||b-c||c-a…