React | 认识React开发

news2025/9/20 13:46:38

✨ 个人主页:CoderHing

🖥️ Node.js专栏:Node.js 初级知识
🙋‍♂️ 个人简介:一个不甘平庸的平凡人🍬

💫 系列专栏:吊打面试官系列  16天学会Vue 11天学会React  Node专栏

🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️

👉 你的一键三连是我更新的最大动力!❤️


目录

一、React的介绍和特点

React的介绍

React的特点 - 声明式编程

React的特点 - 组件化开发

React的特点 - 多平台适配

二、Hello React

Hello React案例

三、React开发依赖分析

React的开发依赖

Babel和React的关系

四、React组件化的封装

Hello React - 组件化开发

组件化 - 数据依赖

组件化 - 事件绑定


一、React的介绍和特点

React的介绍

  • React是什么?

    • React: 用于构建用户界面的JavaScript库;

React的特点 - 声明式编程

  • 声明式编程:

    • 声明式编程是目前 整个大前端开发的模式: Vue React Flutter SwiftUI

    • 它允许我们 只需要维护自己的状态,当状态改变时,React可以根据最新的状态去渲染我们的UI界面

React的特点 - 组件化开发

  • 组件化开发:

    • 组件化开发页面是目前 前端的流行趋势, 我们会将复杂的界面拆分成一个个小的组件;

React的特点 - 多平台适配

  • 多平台适配:

    • 2013年,发布之初主要是开发Web页面

    • 2015年,推出ReactNative,用于开发移动端跨平台;

    • 2017年,推出ReactVR,用于开发虚拟现实Web应用程序

二、Hello React

Hello React案例

  • 在界面显示一个文本: Hello React

  • 点击下方的按钮,文本改变为:Hello World!

  • 第一步:通过React现实一个Hello React

    • 我们编写React的script代码中,必须添加type="text/babel",可以让babel解析jsx的语法

  • ReactDOM.createRoot函数:用于创建一个React根,之后渲染的内容会包含在这个根中

    • 参数:将渲染的内容,挂载到哪一个HTML元素上

      • 这里我们已经定义一个id为root的div

  • root.render函数:

    • 参数:要渲染的根组件

  • 通过{}语法来引入外部的变量或表达式

三、React开发依赖分析

React的开发依赖

  • 开发React必须依赖三个库:

    • react:包含react所必须的核心代码

    • react-dom:react渲染在不同平台所需要的核心代码

    • babel:将jsx转换成React代码的工具

  • 第一次接触React会被繁琐的依赖搞蒙

    • 对于Vue来说,我们只是依赖一个Vue.js文件即可,但是react居然要依赖三个包

    • 这三个库是 各司其职的,目的就是让每一个库只单纯做自己的事情

    • 在React的0.14版本之前是没有react-dom这个概念的,所有功能都包含在react中;

  • 为什么要进行拆分?因为react-native

    • react包中包含了react web和react-native所共同拥有的核心代码

    • react-dom针对web和native所完成的事情不同

      • web端:react-dom会将jsx最终渲染成真实的DOM,显示在浏览器中

      • native端:react-dom会将jsx最终渲染成原生的控件(如Android中的Button,IOS中的UIButton)

Babel和React的关系

  • babel是什么?

    • 又名 Babel.js

    • 目前前段使用非常广泛的编译器,转移器

    • 如当下很多浏览器并不支持ES6的语法,但是确实ES6的语法非常简洁和方便,我们开发时希望使用它们.

    • 那么编写源码时我们就可以使用ES6来编写,之后通过Babel工具,将ES6转成大多数浏览器都支持的ES5的语法

  • React和Babel的关系:

    • 开发React其实可以不适用babel

    • 前提是我们自己使用React.createElement来编写源代码,他编写的代码 非常的繁琐和可读性差.

    • 那么我们就可以直接编写 jsx的语法,并且让 babel帮助我们转换成React.createElement

四、React组件化的封装

Hello React - 组件化开发

  • 我们可以将其封装成一个组件:

    • root.render 参数 是一个HTML元素或一个组件

    • 我们可以先将之前的业务逻辑封装到一个组件中,然后传入到ReactDOM.render函数中的第一个参数

  • 在React中,怎么封装一个组件? 使用 类|函数式 的方式进行封装(这里先使用类)

    • 定义一个类 (类名大写,组件的名称必须大写,小写会被认为是HTML元素),继承自 React.Component

    • 实现当前组件的render函数

      • render当中返回的jsx内容,就是之后React会帮助我们渲染的内容

组件化 - 数据依赖

  • 组件化问题:数据应该定义在哪里?

  • 在组件中的数据,我们分为两类:

    • 参与界面更新的数据:当数据变量时,需要更新组件渲染的内容

    • 不参与界面更新的数据:当数据变量时,不需要更新组件渲染的内容

  • 参与界面更新的数据我们称为 参与数据流,这个数据定义在当前对象的state中

    • 可以通过在构造函数中 this.state = {定义的数据},必须得是state

    • 当我们的数据发生变化时,可以调用this.setState来更新数据,并通知React进行update操作

      • 在进行update操作时,就会重新调用render函数,并使用最新数据,来渲染界面

 

组件化 - 事件绑定

  • 事件绑定中的this

    • 在类中直接定义一个函数,并将这个函数绑定到元素的onClick事件上,当前这个函数的this指向谁?

  • 默认情况下是undefined

    • 为什么是undefined

    • 因为在正常的DOM操作,监听点击,监听函数中的this其实是节点对象

    • 这次因为React并不是直接渲染为真实DOM,我们编写的这个对象只是一个语法糖,它的本质React的Element对象

    • 那么在这里发生监听的时候,react在执行函数时并没有绑定this,默认情况就是undefined

  • 我们在绑定的函数中,可能想要使用当前对象,如执行this.setState函数,就必须拿到当前对象的this

    • 我们需要在传入函数时,给函数绑定this

    • 如button

    • <button onClick={this.changeText.bind(this)}>改变文本</button>

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

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

相关文章

【分享】免梯子的GPT,玩 ChatGPT 的正确姿势

火了一周的 ChatGPT&#xff0c;HG 不允许还有小伙伴不知道这个东西是什么&#xff1f;简单来说就是&#xff0c;你可以让它扮演任何事物&#xff0c;据说已经有人用它开始了颜色文学创作。因为它太火了&#xff0c;所以&#xff0c;本周特推在几十个带有“chatgpt”的项目中选…

双交叉注意学习用于细粒度视觉分类和目标重新识别

目录Dual Cross-Attention Learning for Fine-Grained Visual Categorization and Object Re-Identification摘要本文方法消融实验Dual Cross-Attention Learning for Fine-Grained Visual Categorization and Object Re-Identification 摘要 目的&#xff1a; 探索了如何扩展…

JDK8——新增时间类、有关时间数据的交互问题

目录 一、实体类 二、数据库 三、数据交换 四、关于LocalDateTime类型 (java 8) 4.1 旧版本日期时间问题 4.2 新版日期时间API介绍 4.2.1 LocalDate、LocalTime、LocalDateTime 4.2.2 日期时间的修改与比较 4.2.3 格式化和解析操作 4.2.4 Instant: 时间戳 4.2.5 Duration 与…

Doris(6):数据导入(Load)之Stream Load

Broker load是一个同步的导入方式&#xff0c;用户通过发送HTTP协议将本地文件或者数据流导入到Doris中&#xff0c;Stream Load同步执行导入并返回结果&#xff0c;用户可以通过返回判断导入是否成功。 1 适用场景 Stream load 主要适用于导入本地文件&#xff0c;或通过程序…

小厂实习要不要去?

大家好&#xff0c;我是帅地。 最近暑假实习招聘&#xff0c;不少 训练营 学员都拿到了小厂实习来保底&#xff0c;但是很多小厂基本要求一周内给答复&#xff0c;中大厂就还在流程之中&#xff0c;所以很纠结小厂实习要不要去。 不知道你是否有这样的纠结&#xff0c;今天帅地…

【测试面试汇总2】

目录Linux操作系统1.Linux操作命令2.在Linux中find和grep的区别&#xff1f;3.绝对路径用什么符号表示&#xff1f;4.当前目录、上层目录用什么表示&#xff1f;5.主目录用什么表示&#xff1f;6.怎么查看进程信息&#xff1f;7.保存文件并退出vi 编辑?8.怎么查看当前用户id&a…

【Python从入门到进阶】15、函数的定义和使用

接上篇《14、字典高级应用》 上一篇我们学习了有关字典的高级应用操作&#xff08;字典的增删改查&#xff09;&#xff0c;本篇我们来学习Python中函数的定义和使用&#xff0c;包括函数的参数、返回值、局部变量和全景变量等操作。 一、一个思考 例如这里有一段大东北洗浴中…

2023年PMP报考时间安排攻略!

1.2023年PMP考试时间 PMP一年开考4次&#xff0c;分别为3月、6月、9月、12月&#xff0c;预计2023年PMP第一次考试时间在2023年3月左右&#xff0c;具体以基金会官方通知为准。 1&#xff09;为什么考PMP&#xff1f; 大部分人考 PMP 无非以下几个原因&#xff0c;总的来说&…

运行时内存数据区之程序计数器

内存是非常重要的系统资源&#xff0c;是硬盘和CPU的中间仓库及桥梁&#xff0c;承载着操作系统和应用程序的实时选行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略&#xff0c;保证了JVM的高效稳定运行。 不同的VM对于内存的划分方式和管理机制存在着部分差…

算法时间复杂度计算

目录 1.时间复杂度计算 1.1 时间复杂度例题 1.1.1例题 1.1.2例题 1.1.3例题 1.1.4例题 1.2时间复杂度leetcode例题 1.时间复杂度计算 首先&#xff0c;我们需要了解时间复杂度是什么&#xff1a;算法的时间复杂度是指算法在编写成可执行程序后&#xff0c;运行时需要耗费…

一天吃透操作系统八股文

操作系统的四个特性&#xff1f; 并发&#xff1a;同一段时间内多个程序执行&#xff08;与并行区分&#xff0c;并行指的是同一时刻有多个事件&#xff0c;多处理器系统可以使程序并行执行&#xff09; 共享&#xff1a;系统中的资源可以被内存中多个并发执行的进线程共同使…

MATLAB | 给热图整点花哨操作(三角,树状图,分组图)

前段时间写的特殊热图绘制函数迎来大更新&#xff0c;基础使用教程可以看看这一篇&#xff1a; https://slandarer.blog.csdn.net/article/details/129292679 原本的绘图代码几乎完全不变&#xff0c;主要是增添了很多新的功能&#xff01;&#xff01;&#xff01; 工具函数完…

FastChat开放,媲美ChatGPT的90%能力——从下载到安装、部署

FastChat开放&#xff0c;媲美ChatGPT的90%能力——从下载到安装、部署前言两个前置软件创建FastChat虚拟环境安装PyTorch安装 FastChat下载 LLaMA&#xff0c;并转换生成FastChat对应的模型Vicuna启动FastChat的命令行交互将模型部署为一个服务&#xff0c;提供Web GUI前言 最…

Cesium:自定义MaterialProperty

在项目中应用Cesium.js时,时常遇到需要对Cesium.js的Material材质或者MaterialProperty材质属性进行拓展的应用场景。如果对GLSL(openGL Shading Language ),即:OpenGL着色语言熟悉的话,参考Cesium官方文档,构建一个新的Material必定不是难事。而MaterialProperty材质属…

【C语言进阶:动态内存管理】动态内存函数的介绍

本节重点内容&#xff1a; malloc 和 free 函数calloc 函数realloc 函数&#x1f338;为什么存在动态内存分配 到目前为止&#xff0c;我们已经掌握的内存开辟方式有两种&#xff1a; 创建变量&#xff1a;int val 20; //在栈空间上开辟四个字节 创建数组&#xff1…

Html5钢琴块游戏制作与分享(音游可玩)

当年一款手机节奏音游&#xff0c;相信不少人都玩过或见过。最近也是将其做了出来分享给大家。 游戏的基本玩法&#xff1a;点击下落的黑色方块&#xff0c;弹奏音乐。&#xff08;下落的速度会越来越快&#xff09; 可以进行试玩&#xff0c;手机玩起来效果会更好些。 点击…

【Python】基于serial的UART串口通信(可实现AT指令自动化 以ML307A开发板为例)

【Python】基于serial的UART串口通信&#xff08;可实现AT指令自动化 以ML307A开发板为例&#xff09; Python下的串口serial库 串行口的属性&#xff1a; name:设备名字 portstr:已废弃&#xff0c;用name代替 port&#xff1a;读或者写端口 baudrate&#xff1a;波特率 byt…

Charles 安装及配置,详细步骤(不错,保存一下)

一、安装激活 1.1、下载 https://www.charlesproxy.com/download/ 1.2、激活 打开Charles > Help > Register Charles > 输入 Registered Name &#xff1a; https://zhile.io License Key&#xff1a;48891cf209c6d32bf4 二、代理配置 2.1、代理设置 Proxy > Pr…

Nodejs中的fs模块

一、文件写入操作 writeFile 直接打开文件默认是 w 模式&#xff0c;所以如果文件存在&#xff0c;该方法写入的内容会覆盖旧的文件内容 语法&#xff1a; writeFile(file, data[, options], callback)异步writeFileSync(file, data)同步 参数&#xff1a; file文件名data要…

MYSQL 2:一条更新语句是如何进行的

一. MYSQL的一条更新语句如何进行的&#xff1f; 和查询一样&#xff0c;一开始我们需要通过连接器连接到MYSQL服务器上&#xff0c;然后我们会将我们的语句交给解析器&#xff0c;然后交给执行器。比如我们执行一条这样的语句 update cc1 from user_info where id 2 1.执行…