【Vue3+Vite+Ts+element-plus】vue 使用 tsx语法详解

系列文章目录

【Vue3+Vite+Ts+element-plus】
超级详细 最新 vite4+vue3+ts+element-plus+eslint-prettier 项目搭建流程
【Vue3+Vite+Ts+element-plus】使用tsx实现左侧栏菜单无限层级封装
【Ts 系列】
TypeScript 从入门到进阶之基础篇(一) ts类型篇


文章目录

  • 系列文章目录
  • 前言
  • 一、必要插件安装
    • 1.安装
    • 2.配置
  • 二、vue文件与 tsx文件内容区别
  • 三、绑定变量
  • 四 、v-show与v-if、v-else 命令
  • 五、v-for 循环
  • 六、插槽
  • 七、事件监听


前言

本章我们将了解 在vue中使用tsx 语法 和我们日常vue正常开发上的一些语法区别

一、必要插件安装

我们需要创建一个vue3项目 我用的是vite去创建vue3+ts 项目的 ,这里就不多讲项目的创建了 ,如果要详细的项目搭建流程可参考:超级详细 最新 vite4+vue3+ts+element-plus+eslint-prettier 项目搭建流程
在使用tsx之前 我们要安装一些插件 使我们的项目支持tsx

1.安装

//下面3种安装方式选择一种 推荐pnpm
yarn add @vitejs/plugin-vue-jsx
//or
npm install @vitejs/plugin-vue-jsx -D
//or
pnpm install @vitejs/plugin-vue-jsx -D

2.配置

在 vite.config.ts 文件中挂载

import vueJsx from '@vitejs/plugin-vue-jsx'
export default defineConfig({plugins: [ vueJsx()]
})

tsconfig.json 文件中

{// include 需要包含tsx
"include": ["src/*", "src/**/*.vue", "src/**/*.tsx", "src/**/*.jsx", "src/**/*.ts", "src/**/*.js"],"compilerOptions": {// 在.tsx文件里支持JSX"jsx": "preserve",}
}

二、vue文件与 tsx文件内容区别

在普通的vue 文件中 内容结构都是用 SFC 方式结构固定:template、script、style

<template><div>Hello World</div>
</template><script setup lang="ts">
</script><style scope>
</style>

而在tsx中 完全是一个ts文件的写法 如下

import { defineComponent } from 'vue';export default defineComponent({setup() {return () => <div>Hello World</div>}
})

三、绑定变量

在vue 文件中 我们绑定变量 是以 v-bind: 的方式或者简写的:冒号 ,而在tsx中则是以大括号的方式来绑定变量 如下面代码

//vue
<template><div :class="className"></div>
</template><script lang="ts" setup>
const className=ref('name')
</script>
//vtsx
import { defineComponent } from 'vue';export default defineComponent({setup() {const className=ref('name')return () => <div class={className}></div>}
})

四 、v-show与v-if、v-else 命令

在tsx 中 是支持v-show指令 具体用法如下 与vue文件中的用法没有区别
只是写法上需要以{} 的方式 定义这是一个变化的变量

//tsx
import { defineComponent } from 'vue';export default defineComponent({setup() {const isShow=ref(true)return () => <div v-show={isShow.value}>Hello World</div>}
})

注意 在tsx 是不支持v-if 的 ,我们可以使用条件判断语句来实现v-if的功能,一般是三目运算符

//tsx
import { defineComponent } from 'vue';export default defineComponent({setup() {const isShow=ref(true)return () => <div>{isShow.value?'Hello':'Hello 前端小羽'}</div>}
})

五、v-for 循环

在vue中 我们生成一个列表 通常是用 v-for 的方法去实现的 ,但是在tsx中是不支持 v-for写法的 所以通常是用map循环的方式来生成列表 具体代码区别如下:

//vue
<template><div><div v-for="item in list" :key="item">{{item}}</div></div>
</template><script lang="ts" setup>
const list=ref([1,2,3,4,5,6])
</script>
//vtsx
import { defineComponent } from 'vue';export default defineComponent({setup() {const list=ref([1,2,3,4,5,6])return () =><div>{list.map((item:any)=>(<div>{item}</div))}</div>}
})

六、插槽

在vue中插槽的实现方式如下

// SFC child
<template><div><slot>默认插槽: default</slot><br /><slot name="content">具名插槽:content</slot><br /><slot name="main" :test="111" >作用域插槽:main</slot></div>
</template>// SFC parent
<template><div><child><template #main="row"> {{ row.test}} </template><template #content>我是内容</template></child></div>
</template>

在tsx中插槽的写法2如下

// TSX child
import { defineComponent } from 'vue';export default defineComponent({setup(props, { slots }) {return () => (<div>默认插槽: {slots.default && slots.default()}<br />具名插槽: {slots.content&& slots.content()}<br />作用域插槽:{slots.main && slots.main({ name: '我是作用域插槽的传值' })}</div>);}
});// TSX parent 第一种方式
return () => (<Child v-slots={{default: () => '默认',content: () => '我是内容',main: (props: Record<'name', string>) =>  + props.name}}></Child>
)// 第二种方式
return () => (
const slot={default: () => '默认的内容是',content: () => '我是有名称的',main: (props: Record<'name', string>) => props.name}<Child v-slots={slot}></Child>
)

七、事件监听

在vue 中 监听事件使用 v-on或者@ ,但是在tsx中则是以on开头,即使我们的自定义事件没有on,也要在监听的时候加上,一般都采用的是小驼峰的方式 例如@change 变成 onChange @click 变成 onClick 事件等。
注意 如果是自定义事件只需要在事件名前面加上on即可

// SFC
<template><div @click="hanClick">无参数</div><div @click="(event) => hanClick1(event)">鼠标事件参数</div><div @click="hanClick2('我是前端小羽')">自定义参数</div>
</template>// TSX
return () => (<><div onClick={hanClick}>无参数</div><div onClick={(event) => hanClick1(event)}>鼠标事件参数</div><div onClick={() => hanClick2('我是前端小羽')}>自定义参数</div></>
);
const hanClick= () => {console.log('click');
};
const hanClick1= (e: MouseEvent) => {console.log(e.offsetX);
};
const hanClick2= (name: string) => {console.log(name);
};

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

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

相关文章

MySQL 数据库学习(六)备份与binlog日志

1 案例1&#xff1a;完全备份与恢复 1.1 问题 练习物理备份与恢复练习mysqldump备份与恢复 1.2 方案 在数据库服务器192.168.88.50 练习数据的备份与恢复 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一&#xff1a;练习物理备份与恢复 冷备份&#xff0c;需停止数…

Python手写人脸识别

Python手写人脸识别 引言 人脸识别是一种通过计算机视觉和模式识别技术来识别和验证人脸的技术。Python是一种广泛使用的编程语言,它提供了许多强大的库和工具来实现人脸识别。 在Python中,可以使用多种方法来实现人脸识别,包括基于特征提取的方法、基于深度学习的方法等…

clickhouse学习之路----clickhouse的特点及安装

clickhouse学习笔记 反正都有学不完的技术&#xff0c;不如就学一学clickhouse吧 文章目录 clickhouse学习笔记clickhouse的特点1.列式存储2. DBMS 的功能3.多样化引擎4.高吞吐写入能力5.数据分区与线程级并行 clickhouse安装1.关闭防火墙2.CentOS 取消打开文件数限制3.安装依…

java字符串的学习总结

/* 总结: 1. ★★★★★★★String 是字符串,内容不可改变★★★★★★★★ 常用方法: (1)length() 长度(2)equals(string类型) 比较当前字符串于括号里的字符串是否相同(3)startsWith(st…

支持向量机基本原理,Libsvm工具箱详细介绍,基于支持向量机SVM的遥感图像分类

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接: 基于SVM的遥感图像分类识别,基于支持向量机SVM的遥感图像分类识别(代码完整,数据齐全)_图像匹配中SVM多分类问题资源-CSDN文库 https://downloa…

Python 运行代码

一、Python运行代码 可以使用三种方式运行Python&#xff0c;如下&#xff1a; 1、交互式 通过命令行窗口进入 Python 并开始在交互式解释器中开始编写 Python 代码 2、命令行脚本 可以把代码放到文件中&#xff0c;通过python 文件名.py命令执行代码&#xff0c;如下&#xff…

ARMv7处理器

本文档介绍常见的 ARM 架构,包括 Cortex-A5,Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A15. 常见的术语 DFT(Design for Test), 为了增强芯片可测性而采用的一种设计方法 APB(Advanced Peripheral Bus), 是一种低速外设总线接口,通常用于将外部设备(如I/O端口、定时器、UA…

机器学习——pca降维/交叉验证/网格交叉验证

1、pca降维&#xff1a;目的是提升模型训练速度 定义&#xff1a; 使用方法&#xff1a;给训练数据或者测试数据进行降维处理 给训练数据降维 给测试数据降维&#xff1a;这里1就要用transform&#xff0c;而不是fit_transform&#xff0c;因为之前训练数据降维时特征已经确定…

构建基于neo4j知识图谱、elasticsearch全文检索的数字知识库

前言&#xff1a; 在数字化时代&#xff0c;知识库的建设正逐渐成为企业、学术机构和个人的重要资产。本文将介绍如何使用neo4j和elasticsearch这两种强大的数据库技术来构建知识库&#xff0c;并对其进行比较和探讨。 技术栈&#xff1a; springbootvueneo4jelasticsearch…

【每日一题】1993. 树上的操作

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;深度优先搜索 写在最后 Tag 【深度优先搜索】【树】【设计数据结构】【2023-09-23】 题目来源 1993. 树上的操作 题目解读 本题是一个设计类的题目&#xff0c;对于设计类的题目就一步步的实现题目要求的成员方法即可…

【ACDC数据集】:预处理ACDC心脏3D MRI影像数据集到VOC数据集格式,nii转为jpg,label转为png

【Segment Anything Model】做分割的专栏链接&#xff0c;欢迎来学习。 【博主微信】cvxiaoyixiao 本专栏为公开数据集的预处理&#xff0c;持续更新中。 文章目录 1️⃣ ACDC数据集介绍2️⃣ ACDC数据集样例 3️⃣ 预处理ACDC目标 4️⃣ 处理结果样图 5️⃣ 代码 6️⃣ 划分测…

十五)Stable Diffusion使用教程:另一个线稿出3D例子

案例:黄金首饰出图 1)线稿,可以进行色阶加深,不易丢失细节; 2)文生图,精确材质、光泽、工艺(抛光、拉丝等)、形状(包括深度等,比如镂空)和渲染方式(3D、素描、线稿等)提示词,负面提示词; 3)seed调-1,让ai随机出图; 4)开启controlnet,上传线稿图,选择cann…

leetcode 2560. 打家劫舍 IV

2560. 打家劫舍 IV 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统&#xff0c;所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额 。…

《Java并发编程实战》第4章-对象的组合

0.概念理解 状态空间&#xff1a;对象与变量所有可能的取值&#xff0c;状态空间越小&#xff0c;就越容易判断线程的状态&#xff0c;final域用得越多&#xff0c;就越能简化对象可能状态的分析过程&#xff08;不可变对象只有唯一的状态&#xff09;。 实例封闭&#xff1a;…

Maven高级---分模块设计,继承(继承关系/版本锁定/自定义属性)

目录 分模块设计 继承与聚合 继承关系 ​案例​ 版本锁定 自定义属性/引用属性 分模块设计 把一个项目拆分成不同的模块 我们可以把原来一个项目包中的东西单独提出来作为一个模块,也是解耦的思想 然后我们可以通过引入依赖的方式将这两个模块引入,如下 继承与聚合 继…

xxe攻击(XML外部实体)

1.定义 XML用于标记电子文件使其具有结构性的标记语言&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义&#xff08;可选&#xff09;、文档元素。 http://www.w3school.com.…

初识操作系统

目录 一.操作系统的概念 二.正确理解“管理” 三.操作系统对硬件进行管理 四.系统调用接口 五.用户操作接口 一.操作系统的概念 操作系统是一款进行软硬件资源管理的软件 现在我们知道了操作系统的概念了&#xff0c;那么为什么要有操作系统呢&#xff1f; 操作系统将软…

李宏毅hw-9:Explainable ML

——欲速则不达&#xff0c;我已经很幸运了&#xff0c;只要珍惜这份幸运就好了&#xff0c;不必患得患失&#xff0c;慢慢来。 ----查漏补缺&#xff1a; 1.关于这个os.listdir的使用 2.从‘num_文件名.jpg’中提取出数值&#xff1a; 3.slic图像分割标记函数的作用&#xf…

光电探测器怎么选

光电探测器&#xff0c;也称为PD&#xff08;photodetector&#xff09; 基本原理是&#xff0c;光信号进入光电探测器转换为电压信号&#xff0c;这个电压信号会很弱&#xff0c;微伏或者毫伏级别。 所以PD分为带放大和不带放大 带放大呢&#xff0c;是因为信号太弱&#xf…

Vue系列(二)之 基础语法上篇【插值,指令,过滤器,计算属性监听属性】以及购物车实现

目录 一. 插值 1.1 文本 1.2 原始HTML 1.3 属性 1.4 表达式 二. 指令 2.1 v-if/v-else-if/v-else指令 2.2 v-show指令 2.3 v-for指令 2.4 下拉框/复选框 2.5 动态参数 三. 过滤器 3.1 局部过滤器基本应用 3.2 局部过滤器串行使用 3.3 局部过滤器传参 3.4 全局过…