位置: 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最新版本)

  • 荣耀magic3至臻版怎么分屏(荣耀magic3至臻版和magic4至臻版)

    荣耀magic3至臻版怎么分屏(荣耀magic3至臻版和magic4至臻版)

  • 华为gt3pro怎么下载第三方软件(华为gt3pro怎么下载)

    华为gt3pro怎么下载第三方软件(华为gt3pro怎么下载)

  • oppo手机锁屏杂志怎么关闭(oppo手机锁屏杂志怎么开启)

    oppo手机锁屏杂志怎么关闭(oppo手机锁屏杂志怎么开启)

  • 12306怎么绑定学生资质(12306怎么绑定学生证)

    12306怎么绑定学生资质(12306怎么绑定学生证)

  • 支付宝怎么查对方身份证号(支付宝怎么查对方真实姓名)

    支付宝怎么查对方身份证号(支付宝怎么查对方真实姓名)

  • 怎么下载抖音音乐(怎么下载抖音音源)

    怎么下载抖音音乐(怎么下载抖音音源)

  • r5 4600u相当于i几(r5-4600u相当于英特尔哪个处理器)

    r5 4600u相当于i几(r5-4600u相当于英特尔哪个处理器)

  • 更新miui12会清除数据吗(miui12.5升级会清除数据吗)

    更新miui12会清除数据吗(miui12.5升级会清除数据吗)

  • 微信如何把拉黑的人拉回来(微信如何把拉黑的朋友拉回来)

    微信如何把拉黑的人拉回来(微信如何把拉黑的朋友拉回来)

  • 怎么隐藏热点(怎么隐藏热点不让别人发现)

    怎么隐藏热点(怎么隐藏热点不让别人发现)

  • 小米高温保护关闭(小米高温保护弹窗)

    小米高温保护关闭(小米高温保护弹窗)

  • 腾讯视频怎么下载高清电影(腾讯视频怎么下载电视剧到手机)

    腾讯视频怎么下载高清电影(腾讯视频怎么下载电视剧到手机)

  • 苹果保修需要什么凭证(iphone保修需要什么)

    苹果保修需要什么凭证(iphone保修需要什么)

  • 畅玩5x支持电信物联卡吗(畅玩5x电信版)

    畅玩5x支持电信物联卡吗(畅玩5x电信版)

  • 抖音注销了还有东西么(抖音注销了还有记录吗)

    抖音注销了还有东西么(抖音注销了还有记录吗)

  • 微信黑名单的人发消息能看到吗(微信黑名单的人发信息能看到吗)

    微信黑名单的人发消息能看到吗(微信黑名单的人发信息能看到吗)

  • ps怎么修人脸(ps怎么修人脸瑕疵)

    ps怎么修人脸(ps怎么修人脸瑕疵)

  • 怎么把word中数字变成上标(word如何把数字)

    怎么把word中数字变成上标(word如何把数字)

  • 为什么我的华为p30pro充电慢(为什么我的华为mate40pro升级不了鸿蒙3.0)

    为什么我的华为p30pro充电慢(为什么我的华为mate40pro升级不了鸿蒙3.0)

  • 网络管理对于网络的正常运行有什么意义(网络管理对于网络的作用)

    网络管理对于网络的正常运行有什么意义(网络管理对于网络的作用)

  • qq黄钻有哪些功能(qq黄钻有哪些功能可以玩)

    qq黄钻有哪些功能(qq黄钻有哪些功能可以玩)

  • 字与字节的关系是(字与字节的关系时)

    字与字节的关系是(字与字节的关系时)

  • 手机休眠时间调不了怎么办(手机休眠时间调不了)

    手机休眠时间调不了怎么办(手机休眠时间调不了)

  • 增值税附加税的会计处理
  • 交强险必须交车船使用税吗
  • 资产负债表中的固定资产是原值还是净值
  • 房产税从租和从价
  • 进口消费税为什么一定要组价
  • 税务开票系统如何导入客户信息
  • 生产研发设备
  • 小微企业季报
  • 企业递延所得税费用的计算公式
  • 销售商品提供劳务收到的现金包括
  • 运输费计入原材料成本吗
  • 劳务所得报酬
  • 私企捐助民办学校怎么办
  • 如何确定电动车电池是新电池
  • 支付结算有哪些工具
  • 资产负债表中无形资产是原值还是净值
  • 实收资本转出怎么做账
  • 现金出资可以吗
  • 计提费用的时候可以计提税金吗
  • 归还银行贷款利息分录
  • 计提缴纳社保的会计分录
  • 赎回股份是利好还是利空
  • 投标财务状况报告怎么提供
  • 如何测试网络延迟
  • 购买方已认证的专票怎么红冲
  • 速动比率的合理范围
  • 内部控制的概念最早是从什么得来的
  • debian10.9安装教程
  • linux 分享文件
  • PHP:Memcached::setMultiByKey()的用法_Memcached类
  • 支付包装物押金为什么是其他应收款
  • 最早的滑盖手机,摄像头可以自动旋转
  • upload靶场搭建
  • echarts饼图标题
  • element ui el-tree
  • 投资收益是否缴增值税
  • 借款是经营性负债吗
  • err03 failed to
  • yolov4配置
  • pytorch卷积操作
  • 微信公众平台官网
  • 三代手续费返还是否需要缴纳增值税
  • mongodb基础知识
  • 专用发票必须按照销售方开户行及账号付款吗
  • 专家劳务费能否抵扣个税
  • 员工出差预借差旅费入的借贷
  • 银行贷款第三方是什么意思
  • 宿舍宽带费用
  • 现金折扣不考虑增值税
  • 行政事业单位过节费发放规定
  • 建筑公司异地施工
  • 在记账过程中,可能发生各种各样的差错
  • 房租没有发票如何交税
  • 外资企业股权转让给内资企业流程
  • 公司账户转个人往来款
  • 现代服务业包括哪些项目
  • 收到没有填税号的信息
  • 稳岗补贴会计分录怎么做,需要缴纳企业所得税不
  • sqlserver 通用分页存储过程
  • winxp 移动硬盘
  • 在windows中打开一个窗口后
  • macbook appstore在哪
  • 帮我打开双击锁屏
  • win10系统升级后c盘满了
  • apache服务器配置与使用工作笔记
  • cpqa1000.exe是安全进程吗 cpqa1000进程有什么作用
  • win7右下角点击没反应
  • 用linux做服务器
  • css样式的使用
  • jq复制元素
  • Unity3D游戏开发培训课程大纲
  • node 加密解密
  • mare的用法
  • jquery 输出
  • 基于web的旅游网站毕业设计
  • JavaSacript中charCodeAt()方法的使用详解
  • javascript入门基础
  • jquery属性选择器的基本
  • js如何动态添加class
  • 武汉洪山实验中学是初中还是高中
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设