位置: IT常识 - 正文

Vue3 使用 JSX(笔记自用)(vue3技巧)

编辑:rootadmin
Vue3 使用 JSX(笔记自用)

目录

1. Vue3 中 JSX 的基本应用

1.1 在 .vue 文件中使用 jsx

1.2 .jsx文件格式

2. JSX 和 template 的区别

2.1 插值

2.2 自定义组件

2.3 属性和事件

2.4 条件和循环 

3. JSX 和 slot (体会 JSX 的优越性)


1. Vue3 中 JSX 的基本应用使用 .jsx 格式文件和 defineComponentdefineComponent 可传入 setup 函数 或 组件的配置插值使用单括号 {}1.1 在 .vue 文件中使用 jsx// 父<template> <div class="home"> <JSXDemo1 /> </div></template><script>import JSXDemo1 from '@/components/JSXDemo1.vue'export default { name: 'HomeView', components: { JSXDemo1 }}</script>// JSXDemo1.vue<script>import { ref } from 'vue'export default { setup () { const countRef = ref(200) const render = () => { return <p>DEMO1--{countRef.value}</p> // jsx就是js语法,所以要加 .value } return render }}</script>1.2 .jsx文件格式// 父组件import { defineComponent, ref } from 'vue'import JSXChild from './JSXChild.jsx'export default defineComponent(() => { // 传入 setup 函数 const countRef = ref(300) const render = () => { return <> <p>DEMO2--{countRef.value}</p> <JSXChild a={countRef.value + 100}></JSXChild> </> } return render })// 子组件 JSXChild.jsximport { defineComponent } from 'vue'export default defineComponent({ // 传入组件配置 props: ['a'], setup (props) { const render = () => { return <> <p>child {props.a}</p> </> } return render }})2. JSX 和 template 的区别语法上有很大区别:JSX 本质就是 js 代码,可以使用 js 的任何能力template 只能嵌入简单的 js 表达式,其他需要指令,如 v-ifJSX 已经成为 ES 规范,template 还是 Vue 自家规范本质是相同的:都会被编译为 js 代码(render 函数)2.1 插值template 使用双括号 {{ }}jsx 使用单括号 { }// template<template> <p>{{ name }} -- {{ age }}</p></template>// jsxconst render = () => { return <> <p>child {props.a}</p> </>}2.2 自定义组件template 组件名使用时可改变大小写或是驼峰,jsx 不可更改引入动态参数,template使用冒号+参数名(:msg='msg'),jsx 不需要冒号// template<template> <div class="home"> <watch-effect :msg="msgRef"/> </div></template><script>import { ref } from 'vue'import WatchEffect from '@/components/WatchEffect.vue'export default { name: 'HomeView', components: { WatchEffect, }, setup () { const msgRef = ref('123') return { msgRef } }}</script>// jsx 组件名称不可变,要和引入名字保持一致import { defineComponent, ref } from 'vue'import JSXChild from './JSXChild.jsx'export default defineComponent(() => { const countRef = ref(300) const render = () => { return <> <p>DEMO2--{countRef.value}</p> <JSXChild a={countRef.value + 100}></JSXChild> </> } return render})2.3 属性和事件template 区分属性和事件的写法,jsx 不区分// jsx 属性和事件的写法一样import { defineComponent, ref } from 'vue'import JSXChild from './JSXChild.jsx'export default defineComponent(() => { const countRef = ref(300) function onChange () { console.log('onChange') } const render = () => { return <> <p>DEMO2--{countRef.value}</p> <JSXChild a={countRef.value + 100} change={onChange}></JSXChild> </> } return render})2.4 条件和循环 条件 template 使用 v-if 指令,jsx 在表达式中使用 && (类似 if( a && b))// template v-if<template> <p v-if="flagRef">template demo</p> <button @click="changeFlagRef">click</button></template><script>import { ref } from 'vue'export default { setup () { const flagRef = ref(true) function changeFlagRef () { flagRef.value = !flagRef.value } return { flagRef, changeFlagRef } }}</script>// jsx &&符号判断import { defineComponent, ref } from 'vue'import JSXChild from './JSXChild.jsx'export default defineComponent(() => { const flagRef = ref(true) function changeFlagRef () { flagRef.value = !flagRef.value } const render = () => { return <> <p onClick={changeFlagRef}>DEMO2--{flagRef.value.toString()}</p> {flagRef.value && <JSXChild a={flagRef.value}></JSXChild>} </> } return render}) 循环 template 使用 v-for 指令,jsx 使用数组的 .map 函数// template v-for<template> <ul> <li v-for="item in state.list" :key="item">{{ item }}</li> </ul></template><script>import { reactive } from 'vue'export default { setup () { const state = reactive({ list: ['a', 'b', 'c'] }) return { state } }}</script>// jsx 数组 .map 函数import { defineComponent, reactive } from 'vue'export default defineComponent(() => { const state = reactive({ list: ['a1', 'b1', 'c1'] }) const render = () => { return <> <ul> {state.list.map(item => <li>{item}</li>)} </ul> </> } return render})3. JSX 和 slot (体会 JSX 的优越性)slot 是 Vue 发明的概念,为了完善 template 的能力slot 一直是 Vue 初学者的“噩梦”,特别是:作用域 slot但使用 JSX 将很容易理解,因为 JSX 本质就是 js
本文链接地址:https://www.jiuchutong.com/zhishi/298812.html 转载请保留说明!

上一篇:pinia和vuex的区别 Vuex 和 Pinia 的优缺点 何时使用Pinia,何时使用Vuex(vuex和bus)

下一篇:关于node版本16+ 安装依赖会出现error的问题(node最新版本)

  • 怎么查别人的征信有没有问题(怎么查别人的征信有没有不良记录)

    怎么查别人的征信有没有问题(怎么查别人的征信有没有不良记录)

  • 魅族18s多重(魅族18s重量)

    魅族18s多重(魅族18s重量)

  • 天猫精灵方糖怎么连接蓝牙(天猫精灵方糖怎么连接网络)

    天猫精灵方糖怎么连接蓝牙(天猫精灵方糖怎么连接网络)

  • 荣耀50手机怎么打开OTG功能(荣耀50手机怎么样?值得买吗)

    荣耀50手机怎么打开OTG功能(荣耀50手机怎么样?值得买吗)

  • 为什么抖音音乐只有一半(为什么抖音音乐比播放器的好听)

    为什么抖音音乐只有一半(为什么抖音音乐比播放器的好听)

  • qq为什么加不了好友(qq为什么加不了好友了qq也搜不到)

    qq为什么加不了好友(qq为什么加不了好友了qq也搜不到)

  • 怎么关闭微信收款姓名(怎么关闭微信收红包功能)

    怎么关闭微信收款姓名(怎么关闭微信收红包功能)

  • 支付宝群红包个数上限(支付宝群红包个人怎么发)

    支付宝群红包个数上限(支付宝群红包个人怎么发)

  • word横排文本框怎么设置(word横排文本框怎么设置两行排列)

    word横排文本框怎么设置(word横排文本框怎么设置两行排列)

  • mate20proud版和普通版区别(mate20proud版和普通版哪个好)

    mate20proud版和普通版区别(mate20proud版和普通版哪个好)

  • 苹果手机能定位吗(苹果手机能定位vivo手机吗)

    苹果手机能定位吗(苹果手机能定位vivo手机吗)

  • 小米无线充电手机型号(小米无线充电手机)

    小米无线充电手机型号(小米无线充电手机)

  • 快充充电器为什么突然不能快充了(快充充电器为什么变成普通充了)

    快充充电器为什么突然不能快充了(快充充电器为什么变成普通充了)

  • 华为p40有啥黑科技(华为p40 pro十项黑科技)

    华为p40有啥黑科技(华为p40 pro十项黑科技)

  • cpu三大性能指标(cpu的性能指标主要有哪几项)

    cpu三大性能指标(cpu的性能指标主要有哪几项)

  • iphonex打开相机黑屏(iphonex打开相机一直在闪)

    iphonex打开相机黑屏(iphonex打开相机一直在闪)

  • matlab是不是应用软件(matlab属于应用软件吗)

    matlab是不是应用软件(matlab属于应用软件吗)

  • 摄像头poe和非poe区分(摄像头poe和非poe哪个贵)

    摄像头poe和非poe区分(摄像头poe和非poe哪个贵)

  • 微型计算机的硬盘是(微型计算机的硬件组成)

    微型计算机的硬盘是(微型计算机的硬件组成)

  • designedby是什么型号(designedby是什么牌子耳机)

    designedby是什么型号(designedby是什么牌子耳机)

  • 一加7pro触控采样率(一加七多点触控)

    一加7pro触控采样率(一加七多点触控)

  • eswin是什么公司(esl是什么公司)

    eswin是什么公司(esl是什么公司)

  • 魅族16s没有耳机孔(魅族16s没有耳机孔怎么办)

    魅族16s没有耳机孔(魅族16s没有耳机孔怎么办)

  • vivo s1上市时间(vivo s16上市时间)

    vivo s1上市时间(vivo s16上市时间)

  • 手机谷歌应用商店打不开(手机谷歌应用商店怎么下载)

    手机谷歌应用商店打不开(手机谷歌应用商店怎么下载)

  • 基于OC端的Bridge-API组件化应用(oc底层原理)

    基于OC端的Bridge-API组件化应用(oc底层原理)

  • 分享帝国cms自动加水印的实现方法(帝国cms使用手册)

    分享帝国cms自动加水印的实现方法(帝国cms使用手册)

  • 城建税要减进项税吗
  • 对本次疫情有什么看法
  • 行政事业单位购买固定资产的流程
  • 研发费用成本化和费用化
  • 税前利润包含营业税吗
  • 公司油票怎么抵扣
  • 社保缴费基数的组成部分
  • 临时增加增值税发票
  • 政府减免税款如何账务处理
  • 医疗服务收入占比标准
  • 发票查询发票代码有误
  • 跨境电子商务出来能干嘛
  • 股权投资需要准备哪些材料
  • 怎么算应纳税收多少
  • 二手房如何缴纳契税
  • 运输公司的固定资产怎么提折旧
  • 当月确认收入下月开票
  • 非独立核算的分公司注销流程
  • 企业利息收入要交所得税吗
  • 投资款怎样缴印花税?
  • 汇算清缴应纳税所得额5万要交多少税
  • 基本户发工资要交社保吗
  • 小规模纳税人代理记账流程
  • 发票校验码后六位图解
  • 事业单位计提折旧的有哪些
  • 股权转让企业所得税如何申报
  • 其他业务收入怎么填纳税申报表
  • 建筑行业成本预算和施工方案哪个更有含金量
  • 应收账款少给货款怎么做分录?
  • 其他应收款计提坏账比例
  • 商业承兑汇票承兑人可以是银行吗
  • win服务器安装
  • 会计中记账凭证复核是谁负责
  • 公司取得的发明专利
  • 澳大利亚太平洋银行
  • 分公司收到总公司拨款怎么做分录
  • 网络延迟高不稳定怎么办
  • windows 阅读软件
  • 员工报销电话费缴纳个税
  • 公民什么情况纳税
  • 怎么算土地增值税
  • 资产类备抵科目借方是加还是减
  • 承兑汇票到期超过10天怎么办
  • 只申报个税不交社保
  • 汇算清缴应补税额为负数
  • 纺织企业成本核算方案
  • py转换成exe后打开没用
  • 帝国cms采集标签
  • 投资性房地产由成本模式转为公允价值模式差额计入
  • 发票已经做账但要退款账不平咋办
  • 零申报年报需要哪些表格
  • 公司归还股东借款是否需要股东会决议
  • PostgreSQL教程(十三):数据库管理详解
  • 水利基金的计税税率6
  • 工商年报纳税总额从哪看
  • 未开票收入如何计提增值税
  • 软件开发过程中,一个错误发现的越晚
  • 商贸企业的产值和营业收入
  • 金税盘显示已到锁死期
  • 非营利医疗机构印花税减免政策文件
  • 启用账簿时应在账簿上签名或盖章的是
  • mysql 最新稳定版本
  • windows2003服务
  • 注册表重新注册命令
  • win8的ie打开马上闪退
  • jquery有什么功能
  • 虚拟机中使用keil
  • 杀掉进程windows
  • vue中使用ajax
  • 关于jquery的事件冒泡,以下描述正确的是
  • javascript中hasOwnProperty() 方法使用指南
  • android设计模式书籍
  • 怎么用python画图具体步骤
  • python怎么用的
  • 怎样下载金税盘
  • 消防咨询电话24小时
  • 税控盘开票怎么赋码的教程
  • 电信宽带绑定的手机号怎么解除绑定
  • 企业房产如何过户给个人
  • 成都租房备案凭证怎么办理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设