React | React的JSX语法

react-JSX语法 react-JSX语法初学 阅读详情

✨ 个人主页:CoderHing

🖥️ React.js专栏:React的JSX语法
🙋‍♂️ 个人简介:一个不甘平庸的平凡人🍬

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

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

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


目录

一、认识JSX语法

认识JSX

为什么React选择了JSX

二、JSX的基本使用

JSX的使用

三、JSX的事件绑定

React事件绑定

this的绑定问题

事件参数传递

四、JSX的条件渲染

React条件渲染

五、JSX的列表渲染

React列表渲染

列表中的key

六、JSX的原理和本质

JSX的本质

createElement源码

虚拟DOM的创建过程

jsx -> 虚拟DOM -> 真实DOM

声明式编程


一、认识JSX语法

认识JSX

  • 这段element变量的声明右侧赋值的标签语法是什么呢?

    • 它不是一段字符串(因为没有使用引号包裹)

    • 它看起来是一段HTML元素,但是我们能在js中直接给一个变量赋值html吗?

    • 不可以,如果我们将type=“text/babel”去除掉,那么就会出现语法错误;

    • 这就是一段jsx语法

  • JSX是什么?

    • JSX是一种JavaScript的语法拓展(eXtension)也在很多地方称为JavaScript XML因为看起来像一段XML语法

    • 用于描述我们的UI界面,并且他可以可以和JavaScript融合在一起使用

    • 它不同于Vue中的模板语法,你不需要专门学习模板语法中的指令。如v-for,v-if

为什么React选择了JSX

  • React认为渲染逻辑本质上与其他UI逻辑存在内在耦合

    • 如 UI需要绑定事件

    • 如 UI中需要展示数据状态

    • 如 在某些状态发生改变时,又需要改变UI

  • 他们之间是密不可分,所以React没有将标记分离到不同的文件中,而是将他们组合在一起,这个地方就是组件(Component)

  • JSX其实就是嵌入到JavaScript中的一种语法;

  • JSX的书写规范

    • JSX的顶层只能有一个根元素,所以我们很多时候在外层包裹一个div元素(或者Fragment)

    • 为了方便阅读,通常会在jsx的外层包裹一个小括号()并且jsxk有进行换行书写

    • JSX中的标签可以是单标签也可以是双标签

      • 如果是单标签必须以/>结尾

二、JSX的基本使用

JSX的使用

  • jsx中的注释

  • jsx嵌入变量作为子元素

    • 当变量是Number,String,Array类型时,可以直接展示

    • 当变量是null,undefined,Boolean类型时,内容为空

      • 如果希望可以展示null,undefined,Boolean那么需要转成字符串

      • 如 toString,空字符串拼接,String(变量)等...

    • Object对象类型不能作为子元素(not valid as a React child)

  • jsx嵌入表达式

    • 运算表达式

    • 三元表达式

    • 执行一个函数

  • jsx绑定属性

    • 如元素都会有 title属性

    • img元素会有 src属性

    • a元素有 href属性

    • 元素需要绑定 class

    • 使用 内联样式style

三、JSX的事件绑定

React事件绑定

  • 如果原生DOM原有一个监听事件,如何进行操作?

    • 获取DOM原生,添加监听事件

    • 在HTML原生中,直接绑定onclick

  • 在React中如何操作呢?

    • React事件的命名采用小驼峰,而不是纯小写

    • 我们需要通过{}传入一个事件处理函数,这个函数会在事件发生时被执行;

this的绑定问题

  • 在事件执行后,我们需要获取当前类的对象中相关的属性,这个时候需要用到this

    • 如果直接打印this,会发现它是一个undefined

  • 为什么是undefined?

    • btnClick函数并不是我们主动调用的,而是当button发生改变时,React内部调用了btnClick函数

    • 而它内部调用时,并不知道如何绑定正确的this

  • 解决this问题

    • bind给btnClick显示绑定this

    • 使用ES6 class fields语法

    • 事件监听时传入箭头函数

 

事件参数传递

  • 在执行事件函数时,我们需要获取一些参数值,如 event对象,其他参数

  • 获取event对象

    • 很多时候我们需要拿到event对象做一些事情(阻止默认行为...)

    • 默认情况下,event对象有被直接传入,函数就可以获取到event对象

  • 获取更多的参数

    • 我们需要获取更多的参数时,我们最好的方式是传入一个箭头函数,主动执行的事件函数,并传入参数

四、JSX的条件渲染

React条件渲染

  • 某些情况下,界面的内容会根据不同情况显示不同内容,或决定是否渲染其部分内容

    • Vue中,会通过指令控制 v-if v-show

    • React中,所有的条件判断都和JavaScript代码一致

  • 常见的条件渲染方式有哪些?

  • 条件判断语句

    • 适合逻辑较多的情况

  • 三元运算符

    • 适合逻辑简单的情况

  • 与运算符&&

    • 适合条件成立,渲染某一组件,不成立,什么也不渲染

  • v-show效果

    • 主要控制display属性是否为none

五、JSX的列表渲染

React列表渲染

  • 在真实开发中,我们会从服务器请求到大量数据,数据以列表的形式存储

    • 如 歌曲 歌手 排行榜列表数据

    • 如 商品 购物车 评论列表数据

    • 如 消息 动态 联系人列表数据

  • 在React中并没有像Vue模板中的v-for指令,我们需要通过JavaScript代码的方式组织数据,转成JSX

    • 很多从Vue转到React的人非常不习惯,认为Vue更加的简洁

    • 但是React中的JSX正是因为和JavaScript无缝衔接,让它可以更加灵活

    • 另外React是真正可以提高我们编写代码能力的一种方式

  • 那么在React中如何展示列表呢?

    • 在React中,展示列表最多的方式是使用数组的map高阶函数

  • 很多时候我们在展示一个数组中的数据前,需要对它进行一些处理

    • 如 过滤掉一些内容: filter函数

    • 如 截取数组中一部分: slice函数

列表中的key

  • 我们发现在前面的代码中,都会报一个警告:

  • 这个警告是告诉我们需要在列表展示的jsx中添加一个key

    • key主要的作用是为了提高diff算法时的效率

六、JSX的原理和本质

JSX的本质

  • 实际上,jsx仅只是React.createElement(component,props,...children)函数的语法糖

    • 所有的jsx最终都会被转换成React.createElement的函数调用

  • createElement需要传递三个参数:

  • 参数一:type

    • 当前ReactElement的类型

    • 如果是标签元素,那么就使用字符串表示"div"

    • 如果是组件元素,那么就直接使用组件的名称;

  • 参数二:config

    • 所有jsx中的属性都在config中以对象的属性和值的性质存储

    • 如 传入className作为元素的class

  • 参数三:children

    • 存放在标签中的内容,以children数组的方式进行存储

    • 如果是多个元素怎么办呢? React内部有对它进行处理

虚拟DOM的创建过程

  • 我们通过React.createElement创建出来一个ReactElement对象:

  • 这个ReactElement对象有什么作用呢?为什么要创建他呢?

    • React利用ReactElement对象组成了一个JavaScript的对象树

    • JavaScript的对象树就是 虚拟DOM(Virtual DOM)

  • 如何查看ReactElement的树结构呢?

    • 可以将之前的jsx返回的结果进行打印

  • 而ReactElement最终形成的树结构就是Virtual DOM

jsx -> 虚拟DOM -> 真实DOM

jsx代码 -> ReactElement对象 -> 真实DOM

声明式编程

  • 虚拟DOM帮助我们从命令式编程转到了声明式编程的模式

  • React官方说:Virtual DOM是一种编程的理念

    • 在这个理念中,UI以一种理想化或者说虚拟化的方式保存在内存中,并且它是一个相对简单的JavaScript对象

    • 我们可以通过ReactDOM.render让 虚拟DOM 和 真实DOM同步起来,这个过程叫做协调(Reconciliation)

  • 这种编程的方式赋予了React声明式的API:

    • 只需要告诉React希望让UI是什么状态

    • React来确保DOM和这些状态是匹配的

    • 你不需要直接进行DOM操作,就可以从手动更改DOM,属性操作,事件处理中解放出来.

深入理解 JSX:为什么 React 选择这种语法? 在现代前端开发中,React 已经成为了最受欢迎的 JavaScript 库之一。React 的核心之一是 JSX(JavaScript XML),它允许开发者在 JavaScript 代码中编写类似 HTML 的语法,从而更直观地描述用户界面。本文将深入探讨 JSX 的语法、特性以及它在 React 中的应用。 阅读详情

相关推荐

SAP 人力资源工资配置项3---工资项配置

工资项设置

xiouluoyang的专栏 1万+

React

一、React简介: 1.React概述: React 是一个用于构建用户界面的 JAVASCRIPT 库。 React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。 React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。 React 拥有较高的性能,代码逻辑非常简...

林清溯 487

BOSS直聘数据采集实战:八爪鱼工具高效爬取职位信息的完整指南

本文提供了一份使用八爪鱼采集器高效爬取BOSS直聘职位信息的完整实战指南。针对非技术用户,详细讲解了从软件安装、网址规律分析到流程配置、数据导出的每一步操作,并分享了提升采集稳定性的高级设置与避坑技巧,帮助用户轻松实现数据采集自动化。

weixin_29061509的博客 1474

【React基础】– JSX语法

​JSX是一种JavaScript的语法扩展(eXtension),也在很多地方称之为JavaScript XML,因为看起就是一段XML语法

m0_68324632的博客 2101

MTK6769平台Type-C充电全解析:从硬件管脚到PD协议实战(Android15环境)

本文深入解析了MTK6769平台在Android 15环境下Type-C充电的完整链路。从硬件管脚(特别是核心的CC引脚)功能与连接,到USB-PD协议报文抓取与实战分析,并结合MTK平台PD芯片驱动与充电IC驱动的软件框架,提供了从硬件设计到软件调试的系统性解决方案和常见问题排查案例。

ol78901234的博客 311

QGC二次开发实战指南(一):从零构建自定义地面站界面

本文详细介绍了QGC二次开发实战指南,从零开始构建自定义地面站界面。通过QT和QML技术结合MAVLINK协议,开发者可以打造适合特定业务场景的无人机监控系统,提升操作效率与用户体验。文章包含环境搭建、界面设计、数据绑定等完整开发流程,是QGC二次开发的实用教程。

weixin_28693683的博客 496

【React】JSX:从基础语法到高级用法的深入解析

JSX(JavaScript XML)是一种语法扩展,它让我们可以在 JavaScript 中编写类似 HTML 的代码。它与 JavaScript 紧密结合,并在编译时被转换为 JavaScript 对象。

lph159的博客 3130

国科大学习资料--人工智能原理与算法-第六次作业解析(学长整理)

国科大学习资料–人工智能原理与算法-第六次作业解析(张文生老师主讲)(6.6、6.7、6.11) 6.6 说明如何通过使用辅助变量把诸如A+B=C这样的三元约束转变成三个二元约束。假设值域是有限的。(提示:考虑引进新变量表示变量对的值,引进约束如“X是Y变量对中的第一个元素”。)然后说明如何把多于三个变量的约束类似地转换为二元约束。说明如何通过改变变量的值域来消除一元约束。这就完整演示了任何CSP都可以转变为只含二元约束的CSP。 答:首先,我们引入一个新变量AB,假设A和B的范围均为N,AB的范围为N×N

无名何许人的博客 2870

React教程:JSX语法基础

1、基本概念: React 使用 JSX 来替代常规的JavaScript。 JSX 是按照 XML 语法规范 的 JavaScript 语法扩展。 JSX 语法的本质:并不是直接把 JSX 渲染到页面上,而是内部先转换成了 createElement 形式,再渲染的。 2、 JSX 的优点: JSX 执行更快,因为它在编译为 JavaScript 代码后进行了优化; 它是类型安全的,在编译过...

柯晓楠 661

21、二维卷积层(convolution2dLayer)的全面解析

本文全面解析了二维卷积层(convolution2dLayer)的原理、属性和应用,详细介绍了其在深度学习中的作用及实现方法。文章涵盖创建卷积层的语法、参数设置、算法原理、输入输出格式、优化策略以及实际应用案例,旨在帮助读者更好地理解和应用二维卷积层构建高效的深度学习模型。

red88的博客 320

嵌入式软件工程师面试题目整理(一)

文章目录嵌入式软件工程师面试题目整理(一)Arm有多少32位寄存器?Arm2440和6410有什么区别CPU,MPU,MCU,SOC,SOPC联系与差别上拉&下拉&高阻态串口协议讲一讲RS232和RS485通讯接口有什么区别IIC时序图画一下,IIC有哪些状态,给一个字节,将它发送出去。IIC有什么注意事项?有没有用I/O模拟IIC,如果有需要注意什么?为什么2440的内存起始地址是3后面7个0呢?为什么6410的内存起始地址是5后面7个0呢?内存管理有什么看法?(MMU)锁有哪些?有什么注

嵌入式与Linux那些事的博客 7883

React初识--必知必会的jsx核心语法

文章目录jsx核心语法 必知必会认识jsxJSX是什么?为什么React选择了JSXJSX的书写规范:jsx的使用jsx的注释如何书写jsx嵌入变量一:当变量是Number、String、Array类型时,直接显示二:当变量是null、undefined、Boolean类型时,内容为空三:对象类型不能作为子元素(not valid as a React child)JSX嵌入表达式JSX绑定属性常见属性(src,href...)class属性style内联样式事件绑定this的绑定问题bind显示绑定thi

听雨少年的博客 3022

【K8S系列】在 Kubernetes 中使用 Prometheus 进行监控的详细指南

Prometheus 是一个开源的监控和报警工具,广泛用于 Kubernetes 环境中。本文将深入探讨如何通过 Kubernetes 中的注解配置 Prometheus 的抓取设置,以高效监控服务,并确保系统的可靠性和可维护性。

颜淡慕潇 2万+

【React】深入理解 JSX语法

JSX (JavaScript XML) 是 React 框架中的一种特殊语法扩展,它允许我们在 JavaScript 代码中编写类似 HTML 的代码。JSX 为我们提供了一种直观的方式来描述用户界面的结构,同时保持了 JavaScript 的全部功能。// JSX// 普通 HTMLJSX 是 React 生态系统中的一个重要创新,它成功地将声明式的 UI 描述与 JavaScript 的编程能力结合在一起。虽然它看起来像模板语言,但实际上它具备了完整的 JavaScript 功能。

鑫宝的博客 2073

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

React基础-JSX语法介绍

我们先来看一段代码// 定义根组件 const element = < div > Hello World < / div > // 渲染根组件 const app = ReactDOM . createRoot(document . querySelector("#app")) app . render(element)这段element变量的声明右侧赋值的标签语法是什么呢?它不是一段字符串(因为没有使用引号包裹);它看起来是一段HTML元素,但是我们能在js中直接将HTML元素赋值给一个变量吗?

m0_71485750的博客 8381

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

React如何使用JSX语法

❝ 1、????你可以直接下载本节配套的资源代码,然后导入vscode看效果,也可以跟着教程一点一点敲,都是没问题的。????怎么运行本节代码? 很简单,随便找个浏览器打开index.html即可。????代码目录和上一小节一样,依然是用最简单的html。运行效果聊聊需求用React动态展现一个动态的列表,效果如上。开始整活在编写代码之...

cnzzs的博客 906

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

React —— React 中的JSX语法

本文主要介绍react中的基础知识

Bonsoir777的博客 2250

React中JSX语法入门

通过使用大括号{},可以在JSX中使用任何有效的JavaScript表达式,包括变量、函数调用、算术运算和条件语句等。JSX将HTML标签和JavaScript代码结合在一起,可以在其中使用JavaScript表达式,并且可以通过使用大括号{}来嵌入JavaScript代码。通过使用JSX,我们可以在JavaScript代码中嵌入HTML标记,从而更容易地构建可复用的UI组件。在React中的JSX中,也可以使用任何有效的JavaScript表达式,包括变量、函数调用、算术运算、条件语句等。

m0_74359467的博客 781

React(一):React简介、jsx语法

react起源于facebook公司的内部项目,是一个声明式的,高效且灵活的用于构建用户界面的js库,在2013年5月开源react特点:1、组件化开发:UI被拆分为独立的组件(如按钮、表单),每个组件可以重复使用,组件内部可以封装逻辑状态,避免代码耦合性。2、声明式编程:开发者只需要关注结果而非过程,react自动处理dom更新,比命令式编程直接操作dom代码更简洁,更方便,可读性更强,命令式编程使用的是原生js3、单向数据流:数据从父组件通过props向下传递到子组件,保证数据流动的可预测性。

2301_76473577的博客 1446

【前端】深入了解React JSX语法及实例应用

</div>})

double222222的博客 1674

02. 使用JSX语法开发React组件

JSX and React 是相互独立的两种开发语言,它们经常一起使用,但也可以单独使用它们中的任意一个,JSX 是JavaScript 语言的扩展,而 React 则是一个 JavaScript 的库。

编程是一门实践技术 2694

ReactJS入门之JSX语法

JSX语法 JSX语法就是,可以在js文件中插入html片段,是React自创的一种语法。 JSX语法会被Babel等转码工具进行转码,得到正常的js代码再执行。 使用JSX语法,需要2点注意: 1. 所有的html标签必须是闭合的,如: hello world,写成这样是不可以的: 2. 在JSX语法中,只能有一个根标签,不能有多个。 const div1 = <div&g...

Leon_Jinhai_Sun的博客 286

React中JSX语法的详解

1、基本概念: React 使用 JSX 来替代常规的JavaScript。 JSX 是按照 XML 语法规范 的 JavaScript 语法扩展。 JSX 语法的本质:并不是直接把 JSX 渲染到页面上,而是内部先转换成了 createElement 形式,再渲染的。 2、 JSX 的优点: JSX 执行更快,因为它在编译为 JavaScript 代码后进行了优化; 它是类型安全的,...

柯晓楠 752

React - jsx 语法

在 React 中,JSX(JavaScript XML)是一种语法扩展,它允许开发者在 JavaScript 代码中使用类似 HTML 的语法。JSX 提升了代码的可读性和可维护性,使得编写和构建用户界面更加直观。它被广泛应用于 React 组件的定义。

2302_81312344的博客 684

React(2)认识JSX语法格式

文章目录前言一、JSX语法的基本用法1、使用变量定义JSX元素2、使用变量定义嵌套的JSX元素3、在JSX元素中使用变量4、在JSX元素中调用函数二、JSX元素的语法规定三、在JSX格式中遍历数组四、在JSX格式中使用if语句1、使用三元运算符在JSX中实现判定2、使用逻辑与运算符的短路原理实现判定3、在JSX格式以外借助变量使用if语句完成判定4、在JSX格式以外借助函数使用if语句完成判定总结关于作者 前言 React框架推荐使用的DOM语法格式为JSX语法,属于一种JavaScript扩展,Reac

小海前端 2106

React JSX 语法讲解

本课程旨在系统讲解的核心概念与实战应用。JSX 是 React 的核心语法扩展,它允许我们在 JavaScript 中编写类似 HTML 的结构,使得构建用户界面变得直观和高效。通过本课程,学生将从理解 JSX 的本质出发,逐步掌握其语法规则、表达能力、与 HTML 的差异,最终能够熟练运用 JSX 构建动态、可复用的 React 组件。

人工智能全栈工程师 | 智能算法研发与实战落地​专注于人工智能算法研究、代码实现与工程落地,提供从模型设计到部署应用的全流程解决方案。 670
上一篇: React | 认识React开发
下一篇: 前端资讯 | Node20 正式发布
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderHing[专注前端]

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值