vue3+ts+tsx的使用与好处(语法方面:tsx==jsx)

前言:

        整理分享下vue3+ts+tsx相关的资料,有react使用经验的小伙伴应该更能理解这个的好处,终于在vue3中也支持了,相当于函数的方法来操作界面。

1、vue3项目中为什么要用tsx(等同于我们react的jsx)

  1. 类型安全:TSX 可以帮助开发者在编写代码的过程中检测类型错误,减少运行时错误的发生,并提高代码可维护性。

  2. 更好的代码提示:在使用 TSX 编写代码时,开发者可以享受到更好的编码提示和自动补全功能,从而提高编写代码的效率。

  3. 更容易维护:在使用 TSX 编写代码时,代码结构更加清晰明了,可读性更高,使得代码的维护更加容易。

  4. 容易与 React 生态系统集成:TSX 是 React 生态系统中广泛使用的一个技术栈,使用 TSX 可以更容易地与其它开源组件和库进行集成和协作。

2、他的用法和我们常规的vue3+ts使用有什么区别

  1. 语法:Vue 3 的模板语法和 TSX 的语法是不同的,Vue 3 的模板语法更接近于 HTML,而 TSX 的语法更接近于 JavaScript。

  2. 类型检查:TSX 依赖于 TypeScript,可以使用 TypeScript 的类型检查功能来减少代码中的错误,而 Vue 3 的模板语法没有这种类型检查功能。

  3. 可读性:TSX 的语法更接近于 JavaScript,对于熟悉 JavaScript 的开发者来说,可能更容易阅读和理解 TSX 的代码。但同时也可能会感到 TSX 的语法更繁琐,对于不熟悉 TypeScript 的开发者来说学习曲线可能会更陡峭。

  4. 性能:使用 TSX 编写 Vue 3 组件可能会比使用模板语法的组件具有更好的性能。因为 TSX 可以直接将组件转换为纯 JavaScript 代码,而模板语法需要在运行时进行解析和编译。

        总的来说,使用 TSX 可以使代码更可读性更好,具有类型检查等优势,但也需要引入 TypeScript,并且需要开发者对 TypeScript 有一定的了解。而使用 Vue 3 的模板语法则更加接近于 HTML,对于前端开发者来说更加直观,但可能会牺牲一些性能。具体使用哪种方式需要根据项目需求和开发者技能来决定。

3、项目中的安装部署

1、安装, babel-plugin-jsx

npm insatll @vue/babel-plugin-jsx --save

2、在项目的 babel.config.js 文件的plugins中添加配置:

module.exports = {presets: ['@vue/cli-plugin-babel/preset'],plugins: ['@vue/babel-plugin-jsx']
}

4、具体使用的一些方法分享(使用他与不使用做对比)

1、最重要的一点,他的模块是通过setup的return返回的

import { defineComponent, ref, reactive } from 'vue'export default defineComponent({props: {},setup(props) {const msg = ref('hello tsx')const state = reactive({count: 1})return () => {return <div>{msg.value} <span>{state.count}</span></div>}}
})

2、元素上绑定,{} 加内容

vue文件:
<com :data="data"></com>tsx文件:
<com data={data}></com>

3、v-if  必须用三木运算,或者是  &&

vue文件:
<div v-if="flag"></div>tsx文件,js逻辑代码必须用大括号包裹:
{flag ? <div></div> : null
}
isActive && <p>123</p>  //意思就是, isActive === true的情况下,展示 && 后面的标签isActive && title==='123' && <p>123</p>  
//意思就是, isActive === true && title==='123' 的情况下,展示 && 最后面的标签

4、v-for

vue文件:
<ul><li v-for="item in list" :key="item">{{item}}</li>
</ul>tsx文件:
<ul>{list.map((item) => {return <li key={item}>{item}</li>})}
</ul>

5、点击事件等绑定,有点像原生了,onScroll  ,on

vue文件:
<div @click="handleClick"></div>tsx文件:
<div onClick={handleClick}></div>onMouseenter={handleMouseEnter}
onMouseleave={handleMouseLeave}

6、子传父

vue:
子组件:
emit('custom')父组件:
<ChildComponent @custom="handleCustom" />tsx:
子组件:
emit('custom')父组件:
<ChildComponent onCustom={handleCustom} />

5、api文档分享

使用 JSX 书写标签语言 – React 中文文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/41239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】 工程

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星TO…

oracle 更新语句条件匹配不生效

最近在工作中写了一个供别人调用的Oracle的存储过程接口&#xff0c;功能很简单&#xff0c;就是根据传入的几个参数来更新表中的某些数据&#xff0c;但是在联调过程中传入的更新匹配条件和被更新的数据一致对不上&#xff0c;更新的数据会比匹配的三个条件的数据多&#xff0…

注解 @Slf4j

注解 Slf4j 1. 注解由来&#xff1a; Slf4j 是 Lombok 提供的一种注解&#xff0c;用于在类中自动生成一个名为 log 的日志对象。通过使用 Slf4j 注解&#xff0c;可以方便地在代码中使用日志功能&#xff0c;而无需手动创建和初始化日志对象。 2. 注解示例&#xff1a; Slf…

Spring系列篇--关于AOP【面向切面】的详解

目录 一.AOP是什么 二.案例演示 1.前置通知1.1 先准备接口 1.2然后再准备好实现类 1.3对我们的目标对象进行JavaBean配置 1.4 编写前置系统日志通知 1.5配置系统通知XML中的JavaBean 1.6 配置代理XML中的JavaBean 1.7 测试代码开始测试 注意这里有一个报错问题&…

JVM虚拟机:初始化的介绍

本文重点 我们前面学习了三个步骤: 装载 连接 初始化 初始化 初始化的时候,会为静态成员变量赋值初始值,它有两种方式: ①声明类变量是指定初始值 ②使用静态代码块为类变量指定初始值 例子 最后输出的结果为3,它的过程是这样的: main方法中输出T.count,由于count是…

自签证书让Chrome信任的方式

自签证书让Chrome信任的方式(域名情况) 网站是搭建在linux上的&#xff0c;内容大概是一个code-server;我要在windows的chrome中访问&#xff0c;在Linux机器上自签了一个证书&#xff0c;准备让windows中的chrome信任。linux装好openssl。首先买好域名&#xff0c;配置好解析…

tkinter+爬虫+pygame实现音乐播放器

文章目录 前文安装模块示意图爬虫完整代码pygametkinter完整代码结尾前文 本文将涉及爬虫(数据的获取),pygame(音乐播放器),tkinter(界面显示),将他们汇聚到一起制造一个音乐播放器,欢迎大家的订阅。 安装模块 pip install requests,parsel,lxpy,pygame 示意图

Flask下载文件报错304 NOT MODIFIED

文章目录 问题描述解决方案参考文献 问题描述 前端 Vue 下下来的文件无法正常打开&#xff0c;大小比正常的略大一点&#xff0c;通过 Postman 直接调用是正常的 解决方案 由前端解决 如果响应大小比文件略大一点&#xff0c;从 responses 中取出关键数据再组成文件如果响应…

open cv学习 (二)色彩空间和通道

色彩空间和通道 demo1 import cv2hsv_image cv2.imread("./img.png")cv2.imshow("img", hsv_image) hsv_image cv2.cvtColor(hsv_image, cv2.COLOR_BGR2HSV) h, s, v cv2.split(hsv_image) cv2.imshow("B", h) cv2.imshow("G", s…

文本图片怎么转Excel?分享一些好用的方法

在处理数据时&#xff0c;Excel 是一个非常强大的工具&#xff0c;但有时候需要将文本和图片转换为 Excel 格式&#xff0c;这可能会让人感到困惑。在本文中&#xff0c;我们将介绍一些好用的方法&#xff0c;以便您能够轻松地将文本和图片转换成 Excel 格式。 将文本图片为Exc…

部署piwigo网页 通过cpolar分享本地电脑上的图片

通过cpolar分享本地电脑上有趣的照片&#xff1a;发布piwigo网页 文章目录 通过cpolar分享本地电脑上有趣的照片&#xff1a;发布piwigo网页前言1. 设定一条内网穿透数据隧道2. 与piwigo网站绑定3. 在创建隧道界面填写关键信息4. 隧道创建完成 总结 前言 首先在本地电脑上部署…

K8S核心组件etcd详解(上)

1 介绍 https://etcd.io/docs/v3.5/ etcd是一个高可用的分布式键值存储系统&#xff0c;是CoreOS&#xff08;现在隶属于Red Hat&#xff09;公司开发的一个开源项目。它提供了一个简单的接口来存储和检索键值对数据&#xff0c;并使用Raft协议实现了分布式一致性。etcd广泛应用…

关于计数以及Index返回订单号升级版002(控制字符长度,控制年月标记,拾取未使用编号)--使用两个表来满足操作

1实现步骤以及说明 1.根据参数获取当前setNoIndex表里现在的No的index值&#xff0c;如果包含关键字当前对应数据&#xff0c;则现在SetIndexNoLeft 表中找到有无未使用并未占用的那条数据&#xff08;被占用的数据IsTaken1&#xff0c;生成后使用当前时间与updated时间进行比…

Django图书商城系统实战开发-实现订单管理

Django图书商城系统实战开发-实现订单管理 简介 在本教程中&#xff0c;我们将继续基于Django框架开发图书商城系统&#xff0c;这次的重点是实现订单管理功能。订单管理是一个电子商务系统中非常重要的部分&#xff0c;它涉及到用户下单、支付、发货以及订单状态的管理等方面…

【hive】简单介绍hive的几种join

文章目录 前言1. Common Join2. Map Join介绍&#xff1a;使用方法&#xff1a;限制&#xff1a; 3. Bucket Map Join介绍&#xff1a;好处&#xff1a;使用条件&#xff1a;使用方法&#xff1a; 4. Sort Merge Bucket Map Join介绍&#xff1a;如何使用&#xff1a; 5. Skew …

如何在控制台查看excel内容

背景 最近发现打开电脑的excel很慢&#xff0c;而且使用到的场景很少&#xff0c;也因为mac自带了预览的功能。但是shigen就是闲不住&#xff0c;想自己搞一个excel预览软件&#xff0c;于是在一番技术选型之后&#xff0c;我决定使用python在控制台显示excel的内容。 具体的需…

Redis与MySQL的比较:什么情况下使用Redis更合适?什么情况下使用MySQL更合适?

Redis和MySQL是两种不同类型的数据库&#xff0c;各有自己的特点和适用场景。下面是Redis和MySQL的比较以及它们适合使用的情况&#xff1a; Redis适合的场景&#xff1a; 高性能读写&#xff1a;Redis是基于内存的快速Key-Value存储&#xff0c;读写性能非常高。它适用于需要…

NodeJs导出PDF

&#xff08;优于别人&#xff0c;并不高贵&#xff0c;真正的高贵应该是优于过去的自己。——海明威&#xff09; 场景 根据订单参数生成账单PDF 结果 示例代码 /* eslint-disable no-unused-vars */ /* eslint-disable no-undef */ /* eslint-disable complexity */ const…

【jquery实现动态给表格添加删除行,合并指定单元格】

jquery实现动态给表格添加删除行&#xff0c;合并指定单元格 前端技术 jspjquery 动态添加行 //新增行 $("#addRowBtn").click(function(){var rowEl$("<tr><td><input typecheckbox classcheckItem/></td><td><input nam…