vue3.2版本setup语法糖

setup语法糖:

一、Vue3.0 <script>里定义的变量、属性和方法必须 return 出来,<template>中才能使用;这样会导致在页面上变量会出现很多次。vue3.2只需在script标签中添加setup,就可以帮助我们解决这个问题,无需再写return了。

二、不用写export default 、setup函数

三、组件只需import引入不用写components{}注册

四、不可以直接写name: 'xxx', 但默认name 是 组件名,如Home.vue name 就是Home。

解决方案:

方式一: 如果想修改name可以再写一个script标签专门指定name

<script lang="ts">
export default {name: 'Home'
}
</script>
<script lang="ts" setup>
//
</script>

方式二: 使用defineOptions定义组件的name

<script lang="ts" setup>
import { defineOptions } from 'vue'
defineOptions({name: 'Home'
})
</script>

方式三:(vite版的项目)

1先安装npm i
vite-plugin-vue-setup-extend插件

2在vite.config.ts里配置 以下代码

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueSetupExtend from 'vite-plugin-vue-setup-extend'export default () => defineConfig({plugins: [vue(),// 配置vite-plugin-vue-setup-extend插件vueSetupExtend(),],
})

3.vue组件里修改name 再<script>标签上直接写 name="xxx组件name"就行了。

<script name="Home" lang="ts" setup>
</script>

五、新增 defineProps传参(父子组件间)通信 > 相当于接收props传参

六、新增defineEmits子组件向父组件抛出事件

七、新增defineExpose 子组件向父组件暴露属性 > 父组件通过ref可以获取到

八、新增内置指令 v-memo > v-memo=""等号里的值不发生变化,就不会进行更新视图。

九、v-bind 允许在css里绑定变量:

可以参考我的文章
https://www.toutiao.com/article/7302322534442451467/

Home/index.vue的代码:

<template><div class="home"><div>state.count : {{ state.count }}</div><div>state.msg : {{ state.msg }}</div><button @click="state.addCount">++state.Count</button><button @click="state.addChildAge">++子组件的clAge</button><br><!-- 子组件ChildA --><ChildAref="ChildARef":msg="state.msg":num-arr="[1,2,3,4,5]"@addMsg="state.addMsg"@clAddCount="state.clAddCount"/></div>
</template><!--方式1 如果想修改name可以再写一个script标签专门指定name -->
<!-- <script lang="ts">
export default {name: 'Home'
}
</script> --><!--方式3安装配置vite-plugin-vue-setup-extend插件后,直接在script标签中写name=""即可 -->
<script name="Home" lang="ts" setup>
import { ref, reactive, onMounted, defineOptions } from 'vue'// 方式2 定义组件的name
// defineOptions({
//   name: 'Home'
// })
import ChildA from './ChildA.vue'
// vue3.2setup语法糖
const ChildARef: any = ref(null)
const state = reactive({count: 0,msg: 'hello world',addCount: () => {state.count++},//addMsg: (val) => {state.msg += val},clAddCount: (val) => {state.count += val},addChildAge: () => {ChildARef.value.clAge += 1},
})
onMounted(() => {//
})
</script><style lang="css" scoped>
.home {color: pink;font-size: 16px;
}
</style>

Home/ChildA.vue的代码:

<template><div style="font-size: 16px;background: rgb(77, 112, 228);"><h3>我是ChildA组件</h3><h3>测试传参</h3><div>props.msg:{{ msg }}</div><div>clAge:{{ clAge }}</div><!-- v-memo=""等号里的值不发生变化,就不会进行更新视图 --><div v-for="(item, index) in numArr" :key="index" v-memo="[numArr]">numArrItem:{{ item }}</div><button @click="handerAddMsg">新增msg</button><button @click="handerAddCount">新增count</button></div>
</template><script lang="ts" setup>
import { onMounted, defineProps, defineEmits, defineExpose, ref } from 'vue'
// vue3.2setup语法糖
const props = defineProps({msg: {type: String,default: 'default-msg'},numArr: {type: Array,default: () => []}
})
const $myDefineEmits = defineEmits(['addMsg', 'clAddCount'])
const handerAddMsg = ():void => {$myDefineEmits('addMsg', '新增msg->')
}
const handerAddCount = ():void => {$myDefineEmits('clAddCount', 1)
}
const clAge = ref(18)
defineExpose({clAge
})
onMounted(() => {console.log(props)
})
</script>

初始页面显示效果:

父组件index文件设置name="Home",可以看到组件变为Home。

子组件ChildA文件没设置name,可以看到组件名和组件相同ChildA。

点击++state.Count按钮页面显示效果:

点击++子组件的clAge按钮页面显示效果:

点击新增msg按钮页面显示效果:

点击新增count按钮页面显示效果:

可以看到父子组件间的通信是足够用的,新的方法使用起来和之前其实大同小异,代码还比之前简洁了。

欢迎关注我的原创文章:小伙伴们!我是一名热衷于前端开发的作者,致力于分享我的知识和经验,帮助其他学习前端的小伙伴们。在我的文章中,你将会找到大量关于前端开发的精彩内容。

学习前端技术是现代互联网时代中非常重要的一项技能。无论你是想成为一名专业的前端工程师,还是仅仅对前端开发感兴趣,我的文章将能为你提供宝贵的指导和知识。

在我的文章中,你将会学到如何使用HTML、CSS和JavaScript创建精美的网页。我将深入讲解每个语言的基础知识,并提供一些实用技巧和最佳实践。无论你是初学者还是有一定经验的开发者,我的文章都能够满足你的学习需求。

此外,我还会分享一些关于前端开发的最新动态和行业趋势。互联网技术在不断发展,新的框架和工具层出不穷。通过我的文章,你将会了解到最新的前端技术趋势,并了解如何应对这些变化。

我深知学习前端不易,因此我将尽力以简洁明了的方式解释复杂的概念,并提供一些易于理解的实例和案例。我希望我的文章能够帮助你更快地理解前端开发,并提升你的技能。

如果你想了解更多关于前端开发的内容,不妨关注我的原创文章。我会不定期更新,为你带来最新的前端技术和知识。感谢你的关注和支持,我们一起探讨交流技术共同进步,期待与你一同探索前端开发的奇妙世界!

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

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

相关文章

JVM 对象内存布局篇

对象的实例化 创建对象有哪些方式&#xff1f; 1、new对象 最常见的方式 变形1:X的静态方法 变形2:XxxBuilder/XxxFactory的静态方法 2、Class的newlnstance0:反射的方式&#xff0c;只能调用空参的构造器&#xff0c;权限必须是public 3、Constructor的newinstance(X):反射的…

可视化监管云平台EasyCVR宠物粮食食品厂智能视频监控方案

由于我国养宠物群体的不断膨胀&#xff0c;宠物市场也占据了经济的很大一部分&#xff0c;宠物做为人类的好朋友&#xff0c;可以给人们带来极高的精神抚慰&#xff0c;作为“毛孩子”家长&#xff0c;爱宠人士自然不会亏待自家宠物&#xff0c;都会选择最好的口粮以供宠物食用…

【开源】基于Vue+SpringBoot的教学过程管理系统

项目编号&#xff1a; S 054 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S054&#xff0c;文末获取源码。} 项目编号&#xff1a;S054&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2…

CompletableFuture:Java中的异步编程利器

前言&#xff1a; 在秋招的面试中&#xff0c;面试官问了很多关于异步编程相关的知识点&#xff0c;朋友最近也和我聊到了这个话题&#xff0c;因此今天咱们来讨论讨论这个知识点&#xff01; 随着现代软件系统的日益复杂&#xff0c;对于非阻塞性和响应性的需求也在不断增加…

3 文本分类入门finetune:bert-base-chinese

项目实战&#xff1a; 数据准备工作 bert-base-chinese 是一种预训练的语言模型&#xff0c;基于 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;架构&#xff0c;专门用于中文自然语言处理任务。BERT 是由 Google 在 2018 年提出的一…

gpt1与bert区别

区别1&#xff1a;网络结构&#xff08;主要是Masked Multi-Head-Attention和Multi-Head-Attention&#xff09; gpt1使用transformer的decoder&#xff0c;单向编码&#xff0c;是一种基于语言模型的生成式模型&#xff0c;更适合生成下一个单词或句子 bert使用transformer的…

Domino多Web站点托管

大家好&#xff0c;才是真的好。 看到一篇文档&#xff0c;大概讲述的是他在家里架了一台Domino服务器&#xff0c;上面跑了好几个Internet的Web网站&#xff08;使用Internet站点&#xff09;。再租了一台云服务器&#xff0c;上面安装Nginx做了反向代理&#xff0c;代理访问…

轨迹分析:Palantir评估细胞分化潜能 类似于monocle2

轨迹分析是单细胞测序分析中重要的组成部分&#xff0c;它基于细胞谱系之间“具有中间态细胞”的理论基础&#xff0c;通过结合先验知识&#xff08;细胞注释、markers&#xff09;、细胞基因表达改变等&#xff0c;为在单细胞测序数据赋予了“假时间”&#xff08;pseudotime&…

图的深度优先搜索(数据结构实训)

题目&#xff1a; 图的深度优先搜索 描述&#xff1a; 图的深度优先搜索类似于树的先根遍历&#xff0c;是树的先根遍历的推广。即从某个结点开始&#xff0c;先访问该结点&#xff0c;然后深度访问该结点的第一棵子树&#xff0c;依次为第二顶子树。如此进行下去&#xff0c;直…

每天五分钟计算机视觉:通过残差块搭建卷积残差神经网络Resnet

本文重点 随着深度神经网络的层数的增加,神经网络会变得越来越难以训练,之所以这样就是因为存在梯度消失和梯度爆炸问题。本节课程我们将学习跳跃连接方式,它可以从某一网络层获取激活a,然后迅速反馈给另外一层,甚至是神经网络的更深层,从而解决梯度消失的问题。 传统的…

关于命令行方式的MySQL服务无法启动问题原因之一解决

这里无法启动服务的原因为系统某些进行占用了3306端口问题 当你遇到无法启动的问题时&#xff0c;可以尝试通过netstat -ano命令查看系统进行信息&#xff0c;验证是否3306端口被占用 在本地地址列如果发现3306端口被占用&#xff0c;则通过 taskkill /f /pid 进程id命令关闭进…

matlab 点云放缩变换

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。爬虫网站自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 缩放可以独立应用于三个坐标轴,如将点 ( x , y , z ) ( x

dtm分布式事务框架之SAGA 实战

一.dtm分布式事务框架之SAGA 1.1DTM介绍 DTM是一款开源的分布式事务管理器&#xff0c;解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。 通俗一点说&#xff0c;DTM提供跨服务事务能力&#xff0c;一组服务要么全部成功&#xff0c;要么全部回滚&#xff0c;避免只更…

【天线了解】1.004天线的了解以及使用

一。004天线使用步骤 1.打开天线 &#xff08;1&#xff09;天线的各种版本 注意&#xff1a; 《1》天线包括单通道天线程序&#xff0c;双通道天线程序等。 《2》在没有连接天线时&#xff0c;有的天线程序打不开。 &#xff08;2&#xff09;打开软件前的配置工作 注意&…

接鸡冠^^

欢迎来到程序小院 接鸡冠 玩法&#xff1a;左右移动棒棒君(小海豹)接住鸡冠&#xff0c;避开炸弹&#xff0c;若不小心接住炸弹则游戏结束&#xff0c; 赶紧接鸡冠吧&#xff0c;看看你能够接住多少鸡冠哦^^。。开始游戏https://www.ormcc.com/play/gameStart/211 html <di…

【精选】设计模式——策略设计模式-两种举例说明,具体代码实现

Java策略设计模式 简介 策略设计模式是一种行为型设计模式&#xff0c;它允许在运行时选择算法的行为。 在软件开发中&#xff0c;我们常常需要根据不同情况采取不同的行为。通常的做法是使用大量的条件语句来实现这种灵活性&#xff0c;但这会导致代码变得复杂、难以维护和扩…

Unity打包EXE自定义(拖拽)窗口大小

代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.Runtime.InteropServices; public class MyWindow : MonoBehaviour {[DllImport("user32.dll")]private static extern IntPtr GetActiveWindow(…

CSS-自适应导航栏(flex | grid)

目标&#xff1a;实现左右各有按钮&#xff0c;中间是内容&#xff0c;自适应显示中间的内容导航栏&#xff0c;即 根据中间的宽度大小显示内容。 自适应导航栏 总结&#xff1a;推荐 flex布局 / grid布局 flex布局&#xff1a; 两侧 flex:1; ----->中间自适应 grid布局&…

uniapp(微信小程序)聊天实例,支持图片,语音,表情(附源码)

效果预览 安装教程 配置 请参考Dome 会话配置 {info:{// 用户关键字userKey:2666,// 用户手机userPhone:15252156614,// 用户昵称userName: 健健,// 头像headImg: http://d.hiphotos.baidu.com/image/h%3D300/sign0defb42225381f3081198ba999004c67/6159252dd42a2834a75bb01…

CRM客户关系管理系统的主要功能有哪些?

我们都知道&#xff0c;CRM系统可以帮助企业加快业务增长。如果一个企业能提高业务效率、跨团队协作、有效管理客户、轻松共享和同步数据&#xff0c;那么企业竞争力将极大地提高。基于此&#xff0c;我们说说CRM客户关系管理系统的主要功能分析。 完整的CRM是什么样的&#x…