【React】React入门

news2025/1/16 21:56:32

目录

  • 一、何为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.coloradmin.cn/o/1016227.html

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

相关文章

腾讯mini项目-【指标监控服务重构】2023-08-11

今日待办 使用watermill框架替代当前的base_runner框架 a. 参考官方提供的sarama kafka Pub/Sub(https://github.com/ThreeDotsLabs/watermill-kafka/)实现kafka-go(https://github.com/segmentio/kafka-go)的Pub/Sub&#xff08;sarama需要cgo&#xff0c;会导致一些额外的镜像…

马斯洛的动机与人格、需求层次理论

马斯洛是在研究动机&#xff08;Motivation&#xff09;时&#xff0c;才提出需求层次作为理论基础来支持动机理论的。所谓动机&#xff0c;就是人类的行为到底是由什么驱动&#xff0c;其实是对人类行为的当下原动力&#xff0c;区别于过去、未来或者是有可能起作用的动力。 …

Android开源 日志框架 LogDog V2.3.1

目录 一、简介 二、下载使用 添加jitpack 仓库 添加依赖: 三、更改 1、 LogDogV2.3.1初始化: 2、通过上面的初始化 &#xff0c;已经知道IJsonEngine 优化了泛型参数&#xff0c;采用 Object/Any 3、优化空异常的判断&#xff0c;哪怕打印变量是NULL LogDog会打印“nul…

Spring Boot 自动注入失败的原因

问题 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type com.sveinn.chatbotdomain.zsxq.service.ZsxqApi available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {ja…

elasticsearch6-RestClient操作文档

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

一,安卓aosp源码编译环境搭建

系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…

【Unity基础】4.动画Animation

【Unity基础】4.动画Animation 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;Unity动画编辑器 &#xff08;1&#xff09;Animation组件 这一张我们要学习如何在unity编辑器中&…

神经网络常用模型与应用

上手AI的一个捷径就是了解和使用各种网络模型&#xff0c;结合实际场景去打造自己的应用。神经网络模型是人类的共同财富。 神经网络 神经网络可以分为三种主要类型&#xff1a;前馈神经网络、反馈神经网络和图神经网络。 前馈神经⽹络&#xff08;feedforward neural netwo…

mybatis mapper.xml转建表语句

从网上下载了代码&#xff0c;但是发现没有DDL建表语句&#xff0c;只能自己手动创建了&#xff0c;感觉太麻烦&#xff0c;就写了一个工具类 将所有的mapper.xml放入到一个文件夹中&#xff0c;程序会自动读取生成建表语句 依赖的jar <dependency><groupId>org.d…

非常详细的git-flow分支管理流程配置及使用

非常详细的git-flow分支管理流程配置及使用。 git-flow有两个涵义,一个是指软件开发领域的版本管理流程Gitflow。另一个是指git命令工具git flow。 目前业界主流的版本管理流程是Gitflow 和 trunk-based。 Gitflow流行的比较早。但是目前的流行度要低于 trunk-based模式工作…

Linux系统:OpenSSH7.4p升级到9.0p(服务器漏洞)

清华大学开源软件镜像站下载地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz 一、升级 0、安装Telnet &#xff08;1&#xff09;为防止安装失败&#xff0c;无法用ssh做远程连接&#xff0c;因此先安装telnet yum…

elasticsearch3-索引库的操作

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

视屏点播项目

项目背景 大家应该在电脑上刷过视频吧,这个项目就是模拟一下我们刷视频的整个流程,我们要做的是一个类似B站的网页,这里面包含视频的上传修改和观看以及删除,注意我这个是一个简易版本的,在后面我会做一个升级,增加其他的功能. 基本原理 下面我们说一下我们项目的基本原理.我…

RabbitMQ快速实战以及集群架构详解

一、 MQ 介绍 1 、什么是 MQ &#xff1f;为什么要用 MQ &#xff1f; ChatGPT 中对于消息队列的介绍是这样的&#xff1a; MQ &#xff1a; MessageQueue &#xff0c;消息队列。这东西分两个部分来理解&#xff1a;队列&#xff0c;是一种 FIFO 先进先出的数据结构。 消…

社区团购商城小程序v18.1开源独立版+前端

新增后台清理缓存功能 修复定位权限 修复无法删除手机端管理员 11月新登录接口修复&#xff01; 修复商家付款到零钱&#xff0c; 修复会员登陆不显示头像&#xff0c; 修复无法修改会员开添加绑定

elasticsearch10-查询文档处理

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

C++核心编程之类和对象---C++面向对象的三大特性--封装

目录 类和对象 类和对象的概念 C面向对象的三大特性 一、封装 封装案例1&#xff1a;设计一个学生类&#xff0c;可以给姓名和学号赋值&#xff0c;可以显示学生的姓名和学号。 二、访问权限 访问权限有三种 struct和class的区别 三、成员属性私有化 成员属性私有化的…

第十三章总结

一.泛型 1.定义泛型类 泛型机制语法&#xff1a; 类名<T> 其中&#xff0c;T是泛型的名称&#xff0c;代表某一种类型。 【例13.6】创建带泛型的图书类 代码&#xff1a; 结果&#xff1a; 2.泛型的常规用法 (1)定义泛型类时声明多个变量 class MyCla…

【MySQL集群一】CentOS 7上搭建MySQL集群:一主一从、多主多从

CentOS 7上搭建MySQL集群 介绍一主一从步骤1&#xff1a;准备工作步骤2&#xff1a;安装MySQL步骤3&#xff1a;配置主服务器步骤4&#xff1a;创建复制用户步骤5&#xff1a;备份主服务器数据&#xff0c;如果没有数据则省略这一步步骤6&#xff1a;配置从服务器步骤7&#xf…

Javase | 集合-上

目录&#xff1a; 一、集合&#xff1a;1.集合的概述2.集合的分类 二、“单个方式”存储元素&#xff1a;1.Collection1.1 Collection的概述1.2 Collection接口中常用的方法Iterator<T> iterator( ) 1.3 Collection下的子接口 2.Iterable&#xff1a;2.1 Iterable的概述2…