Vue3中TSX的使用方式

第一步:安装插件

npm install @vitejs/plugin-vue-jsx -D

第二步: 在vite.config.ts中进行引入插件和注册插件

import { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx' // 引入插件// https://vitejs.dev/config/
export default defineConfig({plugins: [vue(),vueJsx(), // 注册插件],resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}}
})

第三步:使用方法

写一个.tsx文件,像组件一样引入页面和使用

如:xue.tsx

在页面引用 import xue from './components/xue.tsx'

在页面使用 <xue></xue>

方法一:导出渲染函数 在里面直接return标签代码

export default function () {return (<div>东北下雪了</div>)
}

方法二: 用render渲染函数返回标签

// 在组件中引入
import {defineComponent} from 'vue';
// 它其实是一个函数,他里面可以放一个对象, 有点类似vue2的写法// 下面定一个render渲染函数,里面返回标签,
// 注意tsx里面使用变量使用的是单花括号
import {defineComponent} from 'vue';
export default defineComponent({data() {return {name: '张三'}},render () {return (<div>{this.name}</div>)}
})

方法三:使用setup函数,然后返回一个渲染函数

import {defineComponent} from 'vue';
export default defineComponent({setup() {return () => (<div>广东没下雪</div>)}
})

语法支持方面

1.v-show 支持 <div v-show={true}></div>

如果使用vue3的ref定义变量,不会自动解包,要手动解包 .value

import {defineComponent, ref} from 'vue';
export default defineComponent({setup() {const flag = ref(false);return () => (<div v-show={flag.value}>广东没下雪</div>)}
})

2.v-if 不支持,需求实现可以使用三目运算符代替

import {defineComponent, ref} from 'vue';
export default defineComponent({setup() {const flag = ref(false);return () => (<><div>{flag.value ? <div>东北下雪了</div> : <div>广州大太阳</div>}</div></>)}
})

3.v-for不支持 使用map函数代替

import {defineComponent, ref} from 'vue';
export default defineComponent({setup() {const flag = ref(false);const data = [{city:'上海'},{city:'北京'},{city:'广州'},{city:'深圳'}];return () => (<>{data.map(v=>{return <div>{v.city}</div>})}</>)}
})

4.v-bind或:传参不支持,直接使用 属性={属性值}

import {defineComponent, ref} from 'vue';
export default defineComponent({setup() {const flag = ref(false);const data = [{city:'上海'},{city:'北京'},{city:'广州'},{city:'深圳'}];return () => (<>{data.map(v=>{return <div name={v.city}>{v.city}</div>})}</>)}
})

5.v-model支持

import {defineComponent, ref} from 'vue';
interface Props{name?:string
}
export default defineComponent({setup(props:Props,{emit}) { // 通过emit派发事件const v = ref<string>('');return () => (<><input v-model={v.value} type='text'></input><div>{v.value}</div></>)}
})

Vue3 TSX组件父子组件传参

1.事件直接使用on代替@,注意不能把函数直接放进去,因为在编译阶段已经调用了

这个要通过函数柯里化的方式来解决 onClick={() =>fn()}

2.props向子组件传参数

3.emit派发函数向父组件传参

函数柯里化是指将使用多个参数的函数转化成一系列使用一个参数的函数的技术, 它返回一个新的函数, 这个新函数去处理剩余的参数

import {defineComponent, ref} from 'vue';
interface Props{name?:string
}
export default defineComponent({props:{name:{type:String,default:'重庆'}},emits:['on-click'], // 派发事件名称setup(props:Props,{emit}) { // 通过emit派发事件const data = [{city:'上海'},{city:'北京'},{city:'广州'},{city:'深圳'}];const fn = (item:any) => {console.log('触发事件'+item.city)emit('on-click',item) // 派发事件}return () => (<><div>props:{props?.name}</div><hr />{data.map(v=>{return <div onClick={() =>fn(v)} name={v.city}>{v.city}</div>})}</>)}
})

父组件使用 

```<xue name="成都来了" @on-click="getItem"></xue>
```const getItem = (item) => {console.log(item, '父在组件收到了');
}

插槽的用法

import {defineComponent, ref} from 'vue';
// 写一个A组件
const A = (_,{slots}) => (<><div>{slots.default ? slots.default() : '默认值'}</div>{/* 可选链操作符 这里如果传了调用一下 */}<div>{slots.foo?.()}</div>
</>)
interface Props{name?:string
}
export default defineComponent({props:{name:{type:String,default:'重庆'}},setup(props:Props,{emit}) { // 通过emit派发事件// 插槽入参数const slot = {default:()=> (<div>我是default</div>),foo:()=> (<div>我是foo slots</div>)}return () => (<><A v-slots={slot}></A><hr /><div>props:{props?.name}</div></>)}
})

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

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

相关文章

CKA认证模块②-K8S企业运维和落地实战-2

CKA认证模块②-K8S企业运维和落地实战-2 K8S常见的存储方案及具体应用场景分析 k8s存储-empty emptyDir类型的Volume是在Pod分配到Node上时被创建&#xff0c;Kubernetes会在Node上自动分配一个目录&#xff0c;因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容…

从测试的角度看待南航机票bug事件

事件描述 11月8日晚间&#xff0c;多名消费者反映南方航空多条成都进出港航线票价&#xff08;不含机建燃油费&#xff09;低至10元、20元、30元不等。上述超低价机票不仅在南方航空App可以购买&#xff0c;多家在线旅游平台也都能抢到。 11月9日&#xff0c;南航官方发布公告…

计算机网络之网络体系结构

计算机网络体系结构 一、常见的计算机体系结构 1.1 OSI标准以及TCP/IP体系结构 OSI标准失败的原因&#xff1a; OSI的专家们缺乏实际经验&#xff0c;他们在完成OSI标准时没有商业驱动力OSI的协议实现起来过分复杂&#xff0c;而且运行效率很低OSI标准的制定周期太长&#x…

css:文本对齐属性vertical-align实现化学元素上标下标的显示

文档 https://developer.mozilla.org/zh-CN/docs/Web/CSS/vertical-align 语法 vertical-align: <value>;可选值&#xff1a; sub&#xff1a;使元素的基线与父元素的下标基线对齐。 super&#xff1a;使元素的基线与父元素的上标基线对齐。 text-top&#xff1a;使…

2023年行业寒冬-运维求职建议

由于前几个月裁员&#xff0c;近期到就业市场上寻找工作&#xff0c;BOSS刷了两三个月&#xff0c;都已经刷烂了&#xff0c;翻来覆去还是那几家公司在招人&#xff0c;面试也有&#xff0c;但很多面试基本就是走个流程&#xff0c;对方也直言候选人很多&#xff0c;需要多加比…

力扣题库2. 两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 开…

JAVA 中集合取交集

日常工作 经常需要取两个数据集的交集。对常用的List 和Set集合做了一个测试 public static void main(String[] args) {List<Integer> list1 Lists.newArrayList();List<Integer> list2 Lists.newArrayList();Set<Integer> set3 Sets.newHashSet();Set&l…

JavaWeb篇_10——HttpServletRequest对象

HttpServletRequest对象 HttpServletRequest对象代表客户端浏览器的请求&#xff0c;当客户端浏览器通过HTTP协议访问服务器时&#xff0c;HTTP请求中的所有信息都会被Tomcat所解析并封装在这个对象中&#xff0c;通过这个对象提供的方法&#xff0c;可以获得客户端请求的所有…

基于SSM的药店药品销售系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

程序员的护城河

程序员的护城河是一个多维度的概念&#xff0c;它包括技术能力的深度、对创新的追求、沟通协作等软实力。这些因素共同构成了程序员在保障系统安全、数据防护以及网络稳定方面所起到的重要作用。 首先&#xff0c;技术能力的深度是程序员的核心竞争力之一。随着科技的不断发展…

车载通信与DDS标准解读系列(1):DDS-RPC

▎RPC & DDS-RPC RPC&#xff1a;Remote Procedure Call&#xff0c;远程过程调用。 远程过程调用是一种进程间通信&#xff0c;它允许计算机程序在另一个地址空间中执行子程序&#xff0c;就好像用别人的东西像用自己的一样&#xff0c;常用于分布式系统。 远程过程调用…

3分钟带你了解前端缓存-HTTP缓存

前情提要 前端缓存分为下面三大类&#xff0c;本文主要讲解HTTP缓存~ 1. HTTP缓存 强缓存协商缓存 2. 浏览器缓存 本地小容量缓存本地大容量缓存 3. 应用程序缓存 HTML5应用程序缓存 缓存作用 减少了冗余的数据传输减少服务器的负担提高了网站的性能加快加载网页速度 …

ssh 免密码登录

ssh 免密码登录 1. 原理 1.1 密码登录的通俗解释 把服务器当作一个凤凰社&#xff0c;每次进社公干都需要拿特别的门票入场&#xff0c;门票便是服务器上的账户密码&#xff1b; 1.2 免密登录 对于凤凰社的高级会员&#xff0c;会在社内存储一张高级会员身份&#xff08;id_rsa…

前端---认识CSS

文章目录 什么是CSS&#xff1f;CSS在HTML中的位置内联样式内部样式外部样式 CSS的选择器普通选择器标签选择器类选择器id选择器通配符选择器 复合选择器后代选择器子选择器并集选择器伪类选择器 CSS的样式 什么是CSS&#xff1f; 就像我们前面说的&#xff1a;CSS是用来描述页…

易基因:综合全基因组DNA甲基化和转录组学分析鉴定调控骨骼肌发育潜在基因 | 研究进展

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 DNA甲基化是骨骼肌发育中关键的表观遗传调控机制。但胚胎鸭骨骼肌发育中负责DNA甲基化的调控因子仍然未知。 2023年10月23日&#xff0c;南京农业大学动物科技学院于敏莉副教授团队在《…

无防御香港服务器如何防CC

虽然相对于DDos攻击&#xff0c;CC攻击的防护危害性相对没有那么大&#xff0c;但是像香港地区普遍对内地的网络比较小的话&#xff0c;CC攻击还是 蛮让人头痛的&#xff0c;实际上对CC的防护尤其是一些小体量的网站&#xff0c;租用高防服务器是划不来的&#xff0c;如果服务器…

核心!华为自研系统鸿蒙趋势

鸿蒙系统的推出引起了全球的关注&#xff0c;毕竟这是华为自主研发的操作系统。这个系统有一些特点很独特。首先&#xff0c;它的自主可控性是一大特色。因为是自家研发的&#xff0c;所以更容易适应外界变化。其次&#xff0c;它采用了分布式架构&#xff0c;这样不同设备之间…

GitHub Universe 2023:AI 技术引领软件开发创新浪潮

GitHub 是全球领先的软件开发和协作平台&#xff0c;数百万开发者和企业在此分享、学习和创建卓越的软件。同时 GitHub 处在 AI 技术前沿&#xff0c;通过其先进的 AI 技术增强开发者体验并赋能未来软件开发的使命。在今天的文章中&#xff0c;我们将一起看看在 GitHub 年度大会…

Azure 机器学习:MLOps - 使用 Azure 机器学习进行模型管理、部署和监视

本文介绍如何在 Azure 机器学习中应用机器学习运营 (MLOps) 做法&#xff0c;以管理模型的生命周期。 应用 MLOps 做法可改善机器学习解决方案的质量和一致性。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff…

project打开文件时,显示无法识别此文件格式?

环境&#xff1a; Win 10 专业版 project 2021 问题描述&#xff1a; project打开文件时&#xff0c;显示无法识别此文件格式&#xff1f; 解决方案&#xff1a; 1.测试新建文件&#xff0c;打开都是这样&#xff0c;检查文件都不是旧版本创建&#xff08;未解决&#xff…