(三)react中JSX语法的基本使用

JSX不是语法糖:React编译机制与 createElement 契约解析 JSX 是 React 的声明式标记语法,其本质是构建 React Element 对象的编译时契约,而非运行时 HTML 或字符串模板。它依赖 Babel 等工具在构建阶段严格转换为 React.createElement 调用,该函数接收 type、props 和 children 三类参数,共同构成可被协调器(reconciler)比对的描述性对象树。这一机制决定了组件挂载、更新与卸载的底层行为,直接影响状态一致性、列表渲染正确性(如 key 设计)、条件渲染逻辑(如 0 与 falsy 的区别)及服 阅读详情

1. 导入 react

import React from 'react' // react库

import ReactDOM from 'react-dom' // 用于操作dom元素

2. 创建虚拟DOM

语法:React.createElement('类型参数', { 入参即元素的属性,null表示无 },子元素)

参数介绍:类型参数type可以是字符串、函数,也可以是React提供的一些内置组件类型。实际上类型参数type可以是:

  • 标签名字符串:浏览器原生标签
  • React 组件:class 组件或函数组件
  • React fragment、React Profiler等内置组件

例如:

const virtualDom= React.createElement('div', {

  className:'greeting'

}, 'Hello, world!')

但是有个问题:React.createElement() 方法创建单层元素还算可以,可是如果出现嵌套结构,使用这种方法可读性差,比较繁琐,无法一眼就看出结构层次,例如:

    React.createElement(  'div', null,  
       React.createElement('h1', null, '手机'), 
       React.createElement('ul', null, 
          React.createElement('li', null, '华为'),  
          React.createElement('li', null, '荣耀')
       )
   )

所以接下来咱们的 JSX 语法就该登场了!

例如上述代码可以用JSX来书写:

const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);

(1):什么是 JSX

JSX即JavaScript XML,表示 JavaScript 代码中写 XML(HTML)格式的代码,就是Javascript和XML结合的一种格式。是 JavaScript 的语法扩展,只要你把HTML代码写在JS里,那就是JSX。它是react.js开发的一套语法糖,一个在React组件内部构建标签的类XML语法。可以提高组件的可读性,因此推荐使用JSX。

 优点:声明式语法更加直观、与 HTML 结构相同,降低了学习成本、提升开发效率

注意:

  • 最终会被编译为 createElement() 方法
  • 只能有一个根标签
  • 标签要闭合(单边标签得有斜杠)

  • 小写首字母对应 HTML的标签,组件名首字母大写。

  • 注释使用 / * 内容 */

  • html标签内注释{/* 最外层有花括号*/}

(2):JSX 语法怎么用

前提:安装:npm i -D babel-preset-react (依赖与:babel-core/babel-loader) 脚手架创建的项目会自动安装

1、使用 JSX 语法创建react 元素

// JSX 语法
const ele = (
    <div>
       <h1>手机</h1>
       <ul>
          <li>华为</li>
          <li>荣耀</li>
       </ul>
    </div>
)


(3):使用 ReactDOM.render() 方法渲染 react 元素到页面中

语法:ReactDOM.render(template,targetDOM)。

参数介绍:参数1:组件  参数2:dom对象表示渲染到哪个元素内 

// 渲染
ReactDOM.render(ele, document.querySelector('#root'))

 注意:

  • JSX 语法上更接近 JavaScript 而不是 HTML,所以 React DOM 使用 camelCase(小驼峰命名)来定义属性的名称,例如:className
  • 特殊属性名: class --> className(因为class是js的关键字) 、for --> htmlFor(因为for是js的关键字)
  • 所有的标签都必须闭合,无论是单标签还是双标签
  • 推荐:使用小括号包裹 JSX 结构,从而避免 JS 中的自动插入分号陷阱
  • 事件名用驼峰命名法。HTML是全小写(onclick),JSX中是驼峰(onClick)

3、嵌入 JS 表达式 

语法:{JavaScript表达式}

const name = '张三'
const title = (
   <div>你好,我叫:{name}</div>
)

注意点

  • 单打括号中可以是任意的 JavaScript 表达式,如:三元表达式,加减乘除,数组,字符串
  • 单大括号中不能出现语句(例如:if/for等)
  • JS 对象一般只会出现在style属性中

 4、条件渲染实现

可以在函数表达式中使用 if/else 或者三元运算符来实现

const loadData = () => {
    if(idLoading) {
        return <div>数据加载中...</div>
    } else {
        return <div>数据加载完成</div>
    }
}

const load = (
    <div>
        {loadData()}
    </div>
)

5、JSX 的列表渲染

const books = [
    {id: 1, name: 'React'},
    {id: 2, name: 'Vue'},
]

 通过遍历数组的方法 map   语法:Array.prototype.map()

const list = (
    <ul>
        {books.map(item => <li>{item.name}</li>)}
    </ul>
)

6、JSX 的样式处理 

行内样式 - style

<h1 style={{ color: 'red', backgroundColor: 'skyblue' }}>  
    JSX的样式处理
</h1>

类名 - className

需要使用 import '样式文件路径/样式文件名称.css’导入样式文件 ,title类在xxx.css文件中定义好

<h1 className="title">  
    JSX的样式处理
</h1>

总结

  • JSX 表示在JS代码中写HTML结构,是React声明式的体现
  • 使用 JSX 配合嵌入的 JS 表达式、条件渲染、列表渲染,可以描述任意 UI 结构
  • 推荐使用 className 的方式给JSX添加样式
     

7.JSX编译原理

JSX的语法需要通过 babel-preset-react 编译后,才能被解析执行

/* 1 在 .babelrc 开启babel对 JSX 的转换 */

{

  "presets": [

    "env", "react"

  ]

}



/* 2 webpack.config.js */

module: [

  rules: [

    { test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ },

  ]

]



/* 3 在 js 文件中 使用 JSX */

const dv = (

  <div title="标题" className="cls container">Hello JSX!</div>

)



/* 4 渲染 JSX 到页面中 */

ReactDOM.render(dv, document.getElementById('app'))

附:箭头函数也可以创建虚拟Dom

注:组件名称必须以大写字母开头,和标签可以区分开,清晰明了。

let Mon = ()=>{

  return <h1>6666666</h1>

}

root.render(<Mon></Mon>); // 相当于 new Mon()
React 简介 及 JSX语法 文章目录React 简介React 概述及特点React 渲染机制JSX 语法 React 简介 React 概述及特点 是一个用于构建用户界面,将数据渲染为HTML视图的开源 JavaScript库 中文官网:React官方中文文档 是 Facebook 开发并于2013年发布并宣布开源 基于 JSX 的语法,JSX是React的核心组成部分,它使用xml标记的方式去直接声明界面,和html、js混写 React核心是 组件,组件的设计提高了代码的复用率,降低了测试的难度和代码复杂度。组件将数据和逻 阅读详情

相关推荐

GNSS差分码偏差(DCB)从原理到实战:如何避免数据处理中的常见错误

本文深入解析GNSS差分码偏差(DCB)的原理及其对高精度定位的关键影响。针对数据处理中因忽略DCB校正导致的常见错误,如单系统PPP高程偏差、多系统融合精度下降及电离层研究失真等,提供了实战解决方案与主流DCB产品获取、集成方法,帮助用户有效规避陷阱,提升数据处理精度。

k5l6m的博客 224

react文档阅读笔记----JSX属性

JSX属性.操作符在JSX中的应用 如果一个模块export出去多个React组件,你可以使用.来获取各个组件。 import React from 'react';const MyComponents = { DatePicker: function DatePicker(props) { return <div>Imagine a {props.color} da

chaos_hf的博客 510

三相SST固态变压器详细设计案例

本案例针对400kVA、30kHz三相固态变压器(SST)开展详细设计,核心采用输入串联输出并联(ISOP)拓扑架构(模块化多电平矩阵变换器M3C简化版),重点完成高频变压器的参数计算、绕组设计、损耗分析及液冷温升验证,同时覆盖系统级架构设计、半导体损耗估算及整机效率优化,全流程基于当前电力电子技术可行性展开。

qq_32103755的博客 3286

只需5分钟教会你使用React中的JSX

JSX的基本使用 createElement()的问题 编写繁琐不简洁 非常的不直观,无法直接看出结构 不优雅,用户体验不好 JSX写法 JSX简介 JSX是Javascript的一种语法拓展 JSX是JavaScript XML简写,表示在JavaScript中编写XML格式代码(也就是HTML格式) 优势: 声明式语法更加直观 与HTML结构相同 降低了学习成本、提升开发效率 JSX是react的核心 使用 使用JSX语法创建react元素 const title = <h1 &g

优快云凉宸 2290

STM32—时钟树(结合系统时钟函数理解)

时钟树的概念: 我们可以把MCU的运行比作人体的运行一样,人最重要的是什么?是心跳! 心脏的周期性收缩将血液泵向身体各处。心脏对于人体好比时钟对于MCU,微控制器(MCU)的运行要靠周期性的时钟脉冲来驱动,而这个脉冲的始源往往是由外部晶体振荡器提供时钟输入,最终转换为多个外部设备的周期性运作。这种时钟“能量”的传递路径犹如大树的养分由主干流向个分支,因此称为时钟树。 STM32时钟: 在STM32...

肥宅快乐博客 1万+

保姆级教程:用ESP32-S3点亮你的第一块ili9341触摸屏(附完整源码与避坑指南)

本文提供了一份详细的ESP32-S3与ili9341触摸屏的入门指南,涵盖硬件连接、环境配置、驱动补全、触摸校准及图形界面开发等关键步骤。特别针对新手常见问题提供解决方案,并附完整源码与避坑技巧,帮助开发者快速上手嵌入式图形界面开发。

weixin_26854829的博客 243

【React 全家桶】React组件(类式)实例对象的三大属性2-props

【React 全家桶】React组件(类式)实例对象的三大属性2-props

Dai的博客 729

46、大数据助力SDN优化流量管理与控制器

本文探讨了大数据在软件定义网络(SDN)中的应用,重点分析了如何利用大数据技术优化SDN控制器的可扩展性和弹性。通过介绍SDN控制器的核心功能及其面临的挑战,提出了集中式、分布式、混合式和分层式控制器放置策略,并结合大数据分析系统架构与技术,详细阐述了在控制器放置优化、流聚合和备份路径识别等场景中的实际应用。文章还给出了大数据分析在SDN控制器优化中的操作流程与优势,展望了未来结合人工智能与物联网的发展方向,强调了数据安全与算法效率的重要性。

xx56789的博客 86

React笔记

react笔记 jsx介绍 类组件和函数组件 props state react状态提升 hooks

weixin_47272010的博客 580

Agent应用实践之三十六 - AgentScope高阶用法:AG-UI

AI 大模型飞速进化,不懂 AI、不会用 Agent 的程序员,正在慢慢被行业淘汰。现在 AI 新技术迭代快到离谱:RAG 还没学明白,MCP 接踵而来;工具刚上手,Skills、各类新 Agent 概念又轮番刷屏;Manus还没看懂,就出来OpenClaw,OpenClaw热度还没退,又出来Hermes。越追越乱、越学越焦虑,永远在被动跟风,陷入学不完、跟不上、用不上的内耗。其实焦虑的根本原因,不是新技术太多,而是不懂大模型 Agent 应用底层原理,只会零散跟风,没有通用方法论。为此我专门推出Agent

代码让AI扣 139

【问题解决】Python 异步 asyncio 卡死、协程不执行、任务泄漏,保姆级排错

本文详细分析了Python异步编程中常见的卡死、协程不执行和任务泄漏问题。文章首先列举了这些问题的典型表现,如程序卡住、死锁、任务未启动等。然后深入剖析了各类问题的根源,包括同步阻塞操作、未正确await、资源未清理等。针对这些问题,文章提供了两套解决方案:一是异步编程最佳实践,包括安全协程执行、带超时的执行、任务清理等实用方法;二是死锁检测和预防机制,通过锁管理和等待图分析来避免死锁。文章还包含可直接使用的代码示例,帮助开发者快速定位和解决异步编程中的常见问题。

博客 448

react项目结构以及jsx模板语法

自学react笔记

t2315226053的博客 627

026:vue+threeJS 设置地面铺砖的效果

BoxGeometry 是 Three.js 中用于创建立方体或长方体的几何体类。它允许你指定立方体的宽度、高度、深度以及这三个方向上的分段数,从而控制立方体的细分程度。width: 立方体的宽度(沿 x 轴方向)。height: 立方体的高度(沿 y 轴方向)。depth: 立方体的深度(沿 z 轴方向)。widthSegments: 可选参数,指定立方体在 x 轴方向上的分段数,默认值为 1。heightSegments: 可选参数,指定立方体在 y 轴方向上的分段数,默认值为 1。

大剑师兰特的GIS世界 645

React修炼营之JSX语法(三)

JSX语法详解1. JSX语法是什么?(what) 1. JSX语法是什么?(what)

alical的博客 344

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Wepack+react中JSX语法使用基础(三)

承接上两篇webpack基础用法 地址:https://blog.csdn.net/weixin_43259355/article/details/107157980 上一篇记录到简单react页面渲染: 接下来介绍如何在react项目 js文件中写入 html结构 (1)什么是JSX语法: 就是符合xml规范的js语法(语法格式相对来说,要比HTML严谨的多) (2)使用JSX语法: 安装babel插件 运行 cnpm install babel-core babel-loader babel-plu

weixin_43259355的博客 242

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

React飞行日记(三) - JSX语法的渲染流程

Jsx的渲染流程 在React.js中, 其为我们提供了一种JSX语法, 能够直接在JS文件中进行虚拟DOM代码的编写, 并在编译后转换成真实DOM渲染到页面中, 那么React是怎么把JSX的虚拟DOM转换成真实的DOM? 主要靠两个API : React.createElement | ReactDOM.render 实验代码 显示效果 渲染步骤 需要借助babel来帮我们编译JSX语法的代码 babel网址 用法如下↓↓↓↓↓↓↓↓ jsx语法转换成编译后, <div>&lt

weixin_44038881的博客 370

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【React学习】—jsx语法规则(三)

7、标签首字母(若小写字母开头,则将该标签转为html中同名元素,若html无该标签对应的同名元素则报错)4、内联样式,要用style={{key:value}}的形式去写。3、样式的类名指定不要用class,要用className。1、定义虚拟DOM,不要写引号,2、标签中混入JS表达式要用{}5、虚拟DOM只有一个根表签。

道阻且长,行则将至。 382

React Native入门学习笔记三(JSX语法)

参考示例: https://github.com/ruanyf/react-demosdemo2 简单数组遍历var names = ['Alice', 'Emily', 'Kate'];ReactDOM.render( <div> { names.map(function (name) { return <div>Hello, {name}!</div> })

猿来这样-谢厂节的博客 9245

react学习之旅三:JSX语法避坑

仍然使用上一章的小姐姐菜单样例 一、注释 标签中注释: 多行注释:{/**/} 单行注释: { // } 二、引用CSS src下创建css文件,文件名style.css .input{ border:3px solid #ae7000 } 在Xiaojiejie组件中引入css文件: import './style.css'; 给input添加css效果,不要使用class,会与class类混淆,使用className: <input classNa

muAluo的博客 266

React学习笔记一 JSX语法组件

React学习笔记一 JSX语法组件

qq_34185638的博客 1390

React Native 开发之 (06) JSX

一 React 1 React定义   React的GitHub地址是 https://github.com/facebook/react。它的官方介绍是 A JavaScript Library for Building user interfaces.可以看出React提出的是一个新的开发模式和理念,它强调的"用户界面". 2. React 特点   React主要有3个特点...

aejkscy8680的博客 115

千古前端React实战指南:JSX语法、生命周期和状态管理的终极教程

GitHub 加速计划的千古前端图文教程是超详细的前端入门到进阶知识库,从零开始学前端,帮助你成为一名精致优雅的前端工程师。本教程将带你深入学习React的核心概念,包括JSX语法、组件生命周期和状态管理,让你快速掌握React开发技能。 ## 快速入门React:从虚拟DOM到环境搭建 ✨ ### React核心概念:虚拟DOM与diff算法 React之所以高效,源于其独特的虚拟DOM和

gitblog_00812的博客 352

【React】深入理解 JSX语法

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

鑫宝的博客 2073

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

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

编程是一门实践技术 2694

JSX 语法详解

JSX即JavaScript XML。一种在React组件内部构建标签的类XML语法。JSX为react.js开发的一套语法糖,也是react.js的使用基础。React在不使用JSX的情况下一样可以工作,然而使用JSX可以提高组件的可读性,因此推荐使用JSX

web00_11的博客 1万+

jsx基本语法

jsx 全称: JavaScript XML react定义的一种类似于XML的JS扩展语法: JS + XML本质是React.createElement(component, props, ...children)方法的语法糖 作用: 用来简化创建虚拟DOM 写法:var ele = <h1>Hello JSX!</h1> 注意1:它不是字符串, 也不是HTML/XML标签 注意2:它最终产生的就是一个JS对象 标签名任意: HTML标签或其它标签 标签属性任意: HTML标

通俗易懂 4904
上一篇: (二)如何用react脚手架构建项目以及文件目录的基本介绍
春风欲雨
博客等级 码龄7年 68粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值