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

  • 销售软件系统退货怎么退
  • 年度纳税申报表A105000纳税调整项目明细表中,收入
  • 用于员工福利的会计分录
  • 发票能减多少税
  • 净流动负债和流动负债
  • 机动车发票怎么入账
  • 甲公司自2018年3月1日开始自行研发一款新兴产品
  • 去年的进项发票今年还能抵扣吗
  • 进项税加计扣除账务处理
  • 税收滞纳金计税吗
  • 出纳需要填哪些表
  • 接受税务稽查补缴所得税账务处理怎么做?
  • 自产的不同产品有哪些
  • 销售产生的增值税
  • 收到社保补助不发放
  • 金蝶采购发票怎么红冲
  • 企业购置房产折旧
  • 生产企业出口退税申报系统详细操作流程
  • 企业向个人赠送礼品
  • win10桌面没有我的电脑图标怎么办
  • 0x00000024蓝屏怎样解决
  • 既征增值税又征消费税的是
  • php数组函数,选班长
  • 怎么确认旧城改造完成
  • win10开机启动文件夹目录说明
  • 缅因州达马里斯科塔地区的佩马基德灯塔 (© Tom Whitney/Adobe Stock)
  • 计划成本核算的账务处理
  • 药品生产企业应建立
  • 代垫运费增值税怎么算
  • 销售产品取得收入
  • php yield 异步
  • 马尼亚岛的降水特点
  • 项目版本管理是什么
  • php分页页码动态的实现
  • php采集源码
  • bom也称为
  • 银行承兑汇票应由在承兑银行开立存款账户的存款人签发
  • php忘记密码
  • php如何实现多进程
  • 销售固定资产是属于销售货物吗?
  • 计提折旧是怎么计算的
  • python3 sys模块
  • 报税报错了能否下月调整
  • 委托代销商品支付的手续费计入什么科目
  • 税控盘减免税款怎么结转
  • 小规模纳税人开专票需要交税吗
  • 所得税费用的账目处理
  • 企业间拆借资金是否合法
  • 其他货币资金怎么结转
  • 暂不认证通知单 不在认证范围内
  • 发票跨年冲红怎么做账
  • 公司给别人公司过账应该注意哪些
  • 盈余公积现金流量表中应填入哪里呢
  • 合同履约成本的会计分录
  • 固定资产明细账图片
  • sql将一个数据库的表导入到另一个数据库
  • sql 重复记录
  • 数据库 mysql
  • mac链接其他屏幕
  • nano linux
  • centos crontab每天执行
  • 如何解决电脑wifi无法上网
  • 如何解决心脏供血不足
  • linux实用技巧
  • android 4.2
  • bat获取当前路径的值
  • 获取服务器信息失败mc
  • js文件保存
  • JQuery给select添加/删除节点的实现代码
  • javascript面向对象编程指南
  • 吉林市无犯罪记录证明网上申请流程
  • 湖北耕地占用税标准
  • 怎样查询退休审核表
  • 金米财税口碑如何?
  • 国家税务局查询发票
  • 公寓限购是好事吗
  • 财务审计报告哪个位置可以看出是否亏损
  • 商铺转让要交哪些税费和费用
  • 为什么10月份社保交不了
  • 工伤保险怎么补申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设