首页 > 其他分享 >JSX、TSX 整体理解

JSX、TSX 整体理解

时间:2023-11-18 13:11:48浏览次数:35  
标签:TypeScript JSX JavaScript React 编译 理解 TSX root

可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么?

JS

JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。

https://www.runoob.com/js/js-intro.html

JSX

1. 什么是 JSX

下面我们看一段代码:

class HelloMessage extends React.Component {
  render() {
    return <div>Hello {this.props.name}</div>;
  }
}

JSX 是一种 JavaScript 的语法扩展,运用于 React 架构中,可以让你在 JavaScript 文件中书写类似 HTML 的标签。再通过翻译器转换到纯 JavaScript 后由浏览器执行,在实际开发中,JSX 在产品打包阶段都已经编译成纯 Javascript,不会带来任何副作用,反而会让代码更加直观并易于维护。

JSX 允许你在 JavaScript 中编写类似 HTML 的标签,从而使渲染的逻辑和内容可以写在一起。有时候,你可能想要在标签中添加一些 JavaScript 逻辑或者引用动态的属性。这种情况下,你可以在 JSX 的大括号内来编写 JavaScript。

元素是构成 React 应用的最小单位,JSX 就是用来声明 React 当中的元素,React 使用 JSX 来描述用户界面。

可以通过以下两个方面了解 JSX:

  • 扩展混合:JSX 是一种 JS 扩展的表达式,混合使用 Javascript 和类 html 来编写代码。
  • 混合支持:支持样式、逻辑表达式和事件的统一混合实现。

2. JSX 编译之 Babel 编译器

JSX 编译过程由 Babel 编译器实现。所谓的 JSX 其实就是 Javascript 对象加 XML,所以使用 React 和 JSX 的时候一定要经过编译的过程:Bable 将 JSX 编译成 JavaScript 对象,然后通过 ReactDom.render() 构造 DOM 元素保持随时页面更新。

// JSX 代码
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<div>Babel 编译器</div>);

// JSX 编译后
const root = ReactDOM.createRoot(document.getElementById("root"))
root.render(React.createElement("div",{id: "babel", className: "babel"}, "Babel 编译器1"))

3. 为什么使用 JSX?

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

React 并没有采用将标记与逻辑分离到不同文件这种人为的分离方式,而是通过将二者共同存放在称之为“组件”的松散耦合单元之中,来实现关注点分离。我们将在后面章节中深入学习组件。如果你还没有适应在 JS 中使用标记语言,这个会议讨论应该可以说服你。

React 不强制要求使用 JSX,但是大多数人发现,在 JavaScript 代码中将 JSX 和 UI 放在一起时,会在视觉上有辅助作用。它还可以使 React 显示更多有用的错误和警告消息。

4. JSX 官方文档

官网:https://zh-hans.react.dev/learn/writing-markup-with-jsx

TypeScript

TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准。TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。

TypeScript 特点:

1)TypeScript 的定位是静态类型语言,在写代码(编译)阶段就能检查错误,而非运行阶段(动态语言边解析边执行)。

2)类型系统是最好的文档,增加了代码的可读性和可维护性。

3)强类型、类型推断。

4)有一定的学习成本,需要理解接口 (Interfaces)、泛型 (Generics)、类 (Classes)等。

5)接口:接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。即接口也是一种规范,用来描述、约束对象、函数、类的形状的,即规范类等里面必须实现哪些方法。

6)TS 最后也是编译为 JS,运行在任何浏览器上。

语法学习:

https://www.runoob.com/typescript/ts-tutorial.html

TSX

TSX 表明是 Typescript 文件并使用了 JSX 语法,JSX 语法参考上面提到的 JSX 详解。最后提供一个别人写的文章帮助理解。

https://zhuanlan.zhihu.com/p/435385184

标签:TypeScript,JSX,JavaScript,React,编译,理解,TSX,root
From: https://www.cnblogs.com/hubert-style/p/17839535.html

相关文章

  • 深入理解Linux中的kill命令
    kill命令是在Linux系统中用于终止进程的强大工具。它提供了一种方式,可以通过发送信号给目标进程,从而影响其运行状态。本文将深入解析kill命令的使用方法、常见信号及其含义,以及一些实际场景中的应用。1.kill命令的基本语法kill命令的基本语法如下:kill[signal]pidsignal:信......
  • React、Umi、RN 整体理解
    可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么?React1.React起源和发展(是什么?)React是用于构建用户界面的JavaScript库,起源于Facebook的内部项目,该公司对市场上所有JavaScriptMVC框架都不满意,决定自行开发一套......
  • 我对物联网的理解
    现在物联网依靠WIFI、蓝牙、lora,32系列大行其道,FPGA我还没有接触,了解是vorilog编程,对于32系列,我用过很多品牌,架构为RISC-v,我理解互联网和物联网通过Linux和云平台可以交互,APP和微信小程序控制编程调试物联网设备已经实现,射频技术也在长足进步,比如5G或更先进的通信技术,而潜在的叠......
  • 彻底理解回调函数
    彻底理解回调函数的实现原理原创 码农的荒岛求生 码农的荒岛求生 2023-11-1708:11 发表于北京大家好,我是小风哥,有很多同学问能不能发下之前的文章,后续我会找一些之前阅读量不错的发下,本文首发于2021年10月,以下是正文。其实之前小风哥写过关于回调函数原理的文章,在这里《1......
  • MIT实验警示:人类或需要人工智能辅助才能理解复杂逻辑
    麻省理工实验揭示人类的天赋缺陷麻省理工学院林肯实验室(MITLincolnLaboratory)的一项研究表明,尽管形式规范具有数学上的精确性,但人类并不一定能对其进行解释。换句话说就是,人类在没有工具辅助的情况下,很难准确理解复杂的逻辑。研究人员将AI在游戏中的决策逻辑用原始公式、更自......
  • 入门c语言--3---关于qsort函数的一些理解
     qsort函数是c语言库函数的一种,作用是将所给的数组中的元素按要求进行排序。 qsort函数可以理解为冒泡函数的进阶,冒泡函数只能对一些如int,char等类型的数组进行排序,当遇到自主定义的struct类型的数组时便不能进行排序。此时便可以通过qsort函数进行排序。  在使用qsort函数......
  • JUC并发编程(终章)各种锁的理解
    各种锁的理解公平锁、非公平锁公平锁:先到先得(不可插队)非公平锁:达者为先(可插队)---------->默认publicReentrantLock(){//默认非公平锁sync=newNonfairSync();}//重载的构造方法,通过fair控制是否公平publicReentrantLock(booleanfair){sync=fair?......
  • 二叉树初步理解
    二叉树初步:代码如下,注释很详细。#define_CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstring>#include<stdlib.h>#include<stdio.h>#include<math.h>#include<iomanip>#include<ctype.h>#include<ctime>#inc......
  • FWT 的另一种理解
    思路若要\(\oplus\)卷积\(a\)和\(b\)(此处\(\oplus\)可以是任意运算),我们希望存在一个线性变换\(\mathscrF\),满足:\[c_k=\sum_{i\oplusj=k}a_ib_j\Longleftrightarrow\mathscrF(a)\cdot\mathscrF(b)=\mathscrF(c)\]若求\(\mathscrF(x)\)和\(\maths......
  • 理解技术和业务的共同目标
    昨天更新了一篇关于稳定性保障的文章,我在文末写了这样一句:遇上降本增效,或者换一个重业务轻技术的领导上台,技术团队就是第一个被砍的。毕竟在国内这种环境,哪儿来的技术导向和工程师文化,不都是营销为王和短期利润为重。有同学提了一个疑问,技术和业务,到底哪个重要?毕竟绝大多数公......