React系列--JSX到底是什么东西

2023-05-16

JSX 简介

JSX的全称是 Javascript and XML,React发明了JSX,它是一种可以在JS中编写XML的语言。

JSX更像一种模板,类似于Vue中的 template

为什么使用JSX?

React 认为渲染逻辑本质上与其他 UI 逻辑内在耦合,比如,在 UI 中需要绑定处理事件、在某些时刻状态发生变化时需要通知到 UI,以及需要在 UI 中展示准备好的数据。

React不强制要求使用JSX。

如何使用JSX

在JSX中使用表达式

在JSX中变量和表达式放在大括号{}中。

const name = 'Josh Perez';
const element = <h1>Hello, { name }</h1>;

ReactDOM.render(
  element,
  document.getElementById('root')
);

JSX中指定属性

JSX中使用 camelCase(小驼峰命名)来定义属性的名称,因此 class 变成了 className。

const name = 'Josh Perez';
const element = <h1 className="app">Hello, { name }</h1>;

ReactDOM.render(
  element,
  document.getElementById('root')
);

JSX中使用样式

JSX中使用 camelCase(小驼峰命名) 语法来设置内联样式属性. React 会在指定元素数字后自动添加 px

const name = 'Josh Perez';
const sttyle = {
  fontSize: 100,
  color: '#FF0000'
}
const element = <h1 style={ style }>Hello, { name }</h1>;

ReactDOM.render(
  element,
  document.getElementById('root')
);

JSX中使用注释

JSX中注释写在 {/*...我是一段注释...*/} 中。

ReactDOM.render(
  <div>
    <h1>Hello World!</h1>
    {/*注释...*/}
  </div>,
  document.getElementById('root')
);

JSX本质刨析

JSX是JS的语法糖,编译时JSX会通过Babel编译成JS。React源码中使用React.createElement()方法来创建JSX,该方法依次接收DOM节点(比如div、span)、属性集合(比如className、style)和children(子节点)三个参数,并返回一个JS对象,也就是虚拟DOM。

以下两段示例是等价的:

const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);
const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);

React.createElement()方法简单点是以下这样的:

function createElement(tag, attrs, ...children) {
  attrs = attrs || {};
 
  // 返回一个JS对象,也就是虚拟Dom
  return {
    tag,
    attrs,
    children,
    key: attrs.key || null,
  };
}

总结

本期讲解了React核心概念JSX,以上例子和部分术语参考React官方文档,适合React新手学习参考,后期会计划边学边输出React基础系列,与大家共同成长。


关注公众号:【全栈星球】,免费领取前端、Node、计算机基础学科电子书籍。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React系列--JSX到底是什么东西 的相关文章

随机推荐

  • keil5 SW 下载提示 internal command error

    博主手焊板子 xff0c 箭头处 10R 焊接成了 10K xff0c 导致 VDDA 和 VSSA 电压异常 xff0c 下载报错
  • Socket通信(TCP/IP)原理与eclipse实践

    网络上的两个程序通过一个双向的通信连接实现数据的交换 xff0c 这个连接的一端称为一个socket 建立网络通信连接至少要一对端口号 socket socket本质是编程接口 API xff0c 对TCP IP的封装 xff0c TCP
  • C++ WinSock2.h与ws2def.h重定义问题

    在用Visual Studio做开发时 xff0c 代码改动后编译出现大量莫名其妙的错误 xff0c 如下 xff1a 最终解决方法如下 xff1a 如果是win32使用VS原始IDE构建的程序 xff1a 在vs的项目属性设置中找到C C
  • 该主机 CPU 类型不支持虚拟化性能计数器,模块“VPMC”启动失败,未能启动虚拟机。

    该主机 CPU 类型不支持虚拟化性能计数器 模块 VPMC 启动失败 未能启动虚拟机 解决办法 xff1a 点击 虚拟机 设置 选择处理器 右边的三个框框全部去掉 xff0c 不要勾选 xff0c 再次启动虚拟机即可 如果是因为没有开启主机
  • 判断系统是大端还是小端

    文章目录 大端与小端判断大端 小端的三种方式直接观察变量的内存值强制转换 xff1a 将 amp int转换为char 使用联合体union进行判断 大端与小端 大端模式 xff1a 指数据的高字节保存在内存的低地址中 xff0c 低字节保
  • void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)的一些理解

    GPIO TypeDef GPIOA BASE 表示将GPIOA BASE强制转换为指针类型的结构体 xff0c define GPIOA GPIO TypeDef GPIOA BASE 表示用 GPIO TypeDef GPIOA BAS
  • OTT-TV网络电视EPG录制和EPG抓取解决方案

    EPG是Electrical Program Guide xff0c 也就是电子节目单 这个名词的出现和OTT TV或者说IPTV紧密相关 EPG功能是频道化电视以 频道 时间 方式提供一段时间内的所有电视节目信息 xff0c 实现业务浏览
  • ROS noetic 安装编译Cartographer踩坑记录

    ROS noetic 安装编译Cartographer踩坑记录 安装编译工具 span class token function sudo span span class token function apt get span update
  • 用PWM控制舵机(以是stm32为例)

    因为做校创需要用到舵机 xff0c 以前知道大致的理论 xff0c 因此看了一些帖子 xff0c 总结一下被以后查看 什么是PWM波 PWM就是脉冲宽度调制 xff0c 也就是占空比可变的脉冲波形 pwm的占空比 xff0c 就是指高电平保
  • 算法时间复杂度的计算

    一 算法时间复杂度定义 在进行算法分析时候 语句总的执行次数T n 是关于问题规模n的函数 进而分型T n 随着n的变化情况并确定T n 的数量级 算法的时间复杂度 也就是算法的时间度量记作 T n 61 O f n 它表示随着问题规模n的
  • 三角形最小路径和(JS)--自底向上解决(动态规划)

    题目描述 xff1a 给定一个三角形 xff0c 找出自顶向下的最小路径和 每一步只能移动到下一行中相邻的结点上 例如 xff0c 给定三角形 xff1a 2 3 4 6 5 7 4 1 8 3 自顶向下的最小路径和为 11 xff08 即
  • leetcode42--接雨水(JS)

    给定 n 个非负整数表示每个宽度为 1 的柱子的高度图 xff0c 计算按此排列的柱子 xff0c 下雨之后能接多少雨水 上面是由数组 0 1 0 2 1 0 1 3 2 1 2 1 表示的高度图 xff0c 在这种情况下 xff0c 可以
  • 自定义组件继承的组件基类React.Component是什么

    我们平时写React组件时都要继承一个父类 xff0c 那就是React Component 也会用到props state和setState xff0c 我们只是会使用它 xff0c 然而不知道它们怎么来的 xff0c 既要知其然也要知其
  • Java 在二维坐标系绘制矩形、圆形、多边形

    最近遇到一个需求 xff0c 大概要求是 xff1a 根据前端传递的参数 xff0c 在Java侧绘制虚拟的二维封闭图形 xff0c 判断各个图形间是否有交集 在java awt包下有个名为Shape的接口 xff0c 可以实现在二维坐标系
  • Uncaught (in promise) TypeError: Cannot read property 'data' of undefined

    最近在学习Redux的时 xff0c 自己写了个Demo xff0c 用fetch异步调用接口时返回这个脑壳疼的问题 问题 xff1a 问题排查 xff1a 一步一步在控制台打印 xff0c 并检测类型 xff0c 发现控制台打印undef
  • Ajax、fetch、axios的区别与优缺点

    背景 前端的技术发展速度非常的快 xff0c 异步请求也是其重要的体现之一 xff0c 从最早的原生XHR xff0c 再到JqueryAjax的统治时代 xff0c 再到近来 xff0c fetch axios等技术也开始出现并大量投入使
  • 什么是 Promise.allSettled() !新手老手都要会?

    什么是 Promise allSettled xff01 新手老手都要会 xff1f Promise allSettled 方法返回一个在所有给定的 promise 都已经 fulfilled 或 rejected 后的 promise x
  • 一份稳进Shopee的简历长啥样?

    小伙伴们好 xff0c 我是Eason 简历是求职流程的第一步 xff0c 是很关键的一环 Eason在做Shopee招聘工作时 xff0c 收到了投递的1000 43 的简历 xff0c 简历也修改过50多次 xff0c 最近也帮10多个
  • Vue项目中较优雅地封装Echarts

    场景 1 Echarts 1 使用时 xff0c 都需要写一堆的 option xff0c 如果每个图表都要写一个 xff0c 一个文件里面的代码量是很大的 2 不方便复用 需求 1 方便复用 2 展示类的图表 xff0c 数据与业务 样式
  • React系列--JSX到底是什么东西

    JSX 简介 JSX的全称是 Javascript and XML xff0c React发明了JSX xff0c 它是一种可以在JS中编写XML的语言 JSX更像一种模板 xff0c 类似于Vue中的 template 为什么使用JSX