React | React的JSX语法

news/2024/12/2 22:41:19/

✨ 个人主页:CoderHing

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

💫 系列专栏:吊打面试官系列  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,属性操作,事件处理中解放出来.


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

相关文章

多个渠道成功销售的秘诀速递

将您的电子商务业务扩展到多个渠道销售似乎是一项艰巨的任务吗?但如果有了正确的多渠道增长战略,这可能是实现快速增长的好方法。当然,您需要考虑借助一些工具与策略,而SaleSmartly(ss客服)可以为您提供。 …

minio 部署、迁移、使用

一、minio 部署 1、单节点部署 部署IP:192.168.206.10 1.1、下载minio的二进制文件 wget https://dl.min.io/server/minio/release/linux-amd64/minio 1.2、规划磁盘 minio 数据目录一定不能和 跟/ 在一个磁盘上,要单独挂载,比如规划将m…

Netty通信技术进阶二

Netty核心组件 1. Bootstrap2 Channel3. EventLoopGroup 和 EventLoop3.1 eventLoopThreads 是多少? 4. ChannelHandler & ChannelHandlerContext & ChannelPipeline4.1 复用Handler4.2 ChannelInboundHandlerAdapter or SimpleChannelInboundHandler 5. By…

7nm+跨域计算+极致性价比,这家芯片厂商助攻车企「降本增效」

汽车芯片赛道的「卷」,或许超出了所有人的预期。对于单纯TOPS算力的比拼,已经翻篇,如何让车企有的用,用得上,还要用得好,已经是新风向。 实际上,在汽车智能化刚刚开始的2018年,彼时类…

【开懂C++】引用与关键字auto

目录 一.引用1.引用的概念2.引用的使用和问题3.引用与指针的比较二.关键字auto 一.引用 1.引用的概念 引用就是给一个已经存在的变量取一个别名&#xff0c;与变量共用一段内存空间。注意引用的类型必须和变量类型相同&#xff0c;来演示下引用如何使用。 #include <iost…

xshell是什么软件

xshell是什么软件? Xshell 是一个强大的远程管理软件&#xff0c;它支持SSH&#xff0c;TELNET 协议。Xshell可以在Windows下访问远端服务器、路由器、网络机顶盒等&#xff0c;类似的常用软件还有putty&#xff0c;以及Windows下的Telnet。 下面简单介绍一下xshell软件。 X…

面试题React

1.React Fiber是什么&#xff1f; 在 React V16 将调度算法进行了重构&#xff0c; 将之前的 stack reconciler 重构成新版的 fiber reconciler&#xff0c;变成了具有链表和指针的 单链表树遍历算法。通过指针映射&#xff0c;每个单元都记录着遍历当下的上一步与下一步&…

银行数字化转型导师坚鹏:金融数据治理、数据安全政策解读

金融数据治理、数据安全政策解读及大数据应用 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不知道如何准确理解金融数据治理及数据安全相关政策 不清楚金融数据治理及数据安全相关政策对银行有什么影响&#xff1f; 不清楚如何有效应用金融数据治理及数据安…