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 -->
    <ChildA
      ref="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.mfbz.cn/a/225403.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用 PHP和html做一个简单的注册页面

用 PHP和html做一个简单的注册页面 index.html的设计 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…

springboot 2.4.4集成 hikari连接池多数据源实例

文章目录 前言一、配置步骤1.1 pom配置1.2 application.properties配置1.3 DataSourceContextHolder类1.4 DynamicDataSource1.5 DataSourceconfig类配置1.6 配置TargetDataSource注解1.7 切面方法1.8 dao的写法 二、测试验证2.1 启动springboot项目2.2 检查数据库连接2.3 debu…

Name or service not knownstname

Name or service not knownstname Hadoop 或 Spark 集群启动时 报错 Name or service not knownstname 原因时因为 workers 文件在windows 使用图形化工具打开过 操作系统类型不对引发的 在Linux系统上删除 workers 文件 使用 vim 重新编辑后分发即可

无公网IP,从公网SSH远程访问家中的树莓派

下午好&#xff0c;我的网工朋友。 今天说点好玩的啊。树莓派 (Raspberry Pi) 可以做事情很多&#xff0c;用作家庭网络中的服务器&#xff0c;是非常流行的一种。 因为它微小的占地面积和低功耗使其成为运行轻量级服务器的完美设备。 在这种情况下&#xff0c;你可以在树莓派…

C# Onnx 百度飞桨开源PP-YOLOE-Plus目标检测

目录 效果 模型信息 项目 代码 下载 C# Onnx 百度飞桨开源PP-YOLOE-Plus目标检测 效果 模型信息 Inputs ------------------------- name&#xff1a;image tensor&#xff1a;Float[1, 3, 640, 640] name&#xff1a;scale_factor tensor&#xff1a;Float[1, 2] ----…

CentOS系统中设置反向代理服务器的步骤

在CentOS系统中设置反向代理服务器可以帮助你隐藏原始服务器的细节&#xff0c;并提高服务器的安全性。以下是在CentOS系统中设置反向代理服务器的步骤概述&#xff1a; 安装反向代理软件&#xff1a; 常见的反向代理软件包括Nginx和Apache。你可以选择其中之一来作为你的反向…

基于gitlab的webhook集成jenkins,并在gitlab流水线中展示jenkins的job状态信息

文章目录 1. 环境信息2. gitlab 部署3. jenkins部署4. gitlab集成jenkins4.1 jenkins的凭据上保存gitlab的账号信息4.2 jenkins中配置gitlab的连接信息4.3 编写jenkins上pipeline文件4.4 jenkins上创建pipeline项目4.5 gitlab上配置webhooks事件4.6 测试 1. 环境信息 gitlab服…

数据结构复习:链表、数组、栈、队列、哈希表、堆、二叉树

数据结构复习&#xff1a;链表、数组、栈、队列、哈希表、堆、二叉树 时间复杂度 链表 在链表中&#xff0c;数据的添加和删除都较为方便&#xff0c;访问比较耗时间 每个数字都有一个“指针”&#xff0c;指向下一个数据内存地址。 数据无需存储在连续空间 访问某个数据&a…

高精度加法,减法,乘法,除法(上)(C语言)

前言 加&#xff0c;减&#xff0c;乘&#xff0c;除这些运算我们自然信手捏来&#xff0c;就拿加法来说&#xff0c;我们要用c语言编程算ab的和&#xff0c;只需让sum ab即可&#xff0c;可是这是局限的&#xff0c;我们都知道int的表示的最大值为2147483647&#xff08;32位…

java单人聊天

服务端 package 单人聊天;import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import…

23款奔驰E350eL升级小柏林音响 13个扬声器 590w

小柏林之声音响是13个喇叭1个功放&#xff0c;功率是590W&#xff0c;对应普通音响来说&#xff0c;已经是上等了。像著名的哈曼卡顿音响&#xff0c;还是丹拿音响&#xff0c;或者是BOSE音响&#xff0c;论地位&#xff0c;论音质柏林之声也是名列前茅。 升级小柏林音响&#…

LC-1466. 重新规划路线(DFS、BFS)

1466. 重新规划路线 中等 n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。去年&#xff0c;交通运输部决定重新规划路线&#xff0c…

相交链表(LeetCode 160)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路方法一&#xff1a;暴力法方法二&#xff1a;哈希表方法三&#xff1a;双栈方法四&#xff1a;双指针&#xff1a;记录链表长度方法五&#xff1a;双指针&#xff1a;互换遍历 5.实现示例参考文献 1.问题描述 给两个单链表的…

短视频账号剪辑矩阵+无人直播系统源头开发

抖去推爆款视频生成器&#xff0c;通过短视频矩阵、无人直播&#xff0c;文案引流等&#xff0c;打造实体商家员工矩阵、用户矩阵、直播矩阵&#xff0c;辅助商家品牌曝光&#xff0c;团购转化等多功能赋能商家拓客引流。 短视频矩阵通俗来讲就是批量剪辑视频和批量发布视频&am…

Java 对接智谱 AI(官方 sdk 是真垃圾)

官方 sdk 狗屎。 一堆密钥不知道啥玩意&#xff0c;文档也没写好。 python 版本的就不清楚&#xff0c;应该支持会比较好&#xff0c;果然做 ai 应用后端开发还是得使用 python 比较好。 那么要如何对接智谱 AI 呢&#xff1f;用小博哥的这个版本&#xff0c;虽然不是官方的…

光伏基础知识

快速了解国内光伏历史 美国是最早制定光伏发电的发展规划的国家&#xff0c;国内从1958年开始专注于太阳电池的研究&#xff0c;到1971年3月首次将太阳电池成功地应用于我国第2颗卫星上&#xff0c;再到1979年开始生产单晶硅太阳电池&#xff0c;直到20世纪90年代中期后光伏发…

ElasticSearch篇---第六篇

系列文章目录 文章目录 系列文章目录前言一、ElasticSearch中的副本是什么?二、ElasticSearch中的分析器是什么?三、什么是ElasticSearch中的编译器?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女…

技术培训邀请函|云时代数据安全建设和实践

在数字化变革时代&#xff0c;云计算渗透到各个行业和领域中&#xff0c;赋能业务创新发展&#xff0c;但机遇与挑战并存。数据作为战略性资产和核心生产要素&#xff0c;在混合多云环境面临着日益严峻的安全风险和越来越多的合规要求。如何实现有效的数据安全保护&#xff0c;…

C++新经典模板与泛型编程:萃取技术中的值萃取

传入一种类型&#xff0c;萃取出另外一种类型 #include <iostream>template<typename T> struct SumFixedTraits;template<> struct SumFixedTraits<char> {using sumT int; };template<> struct SumFixedTraits<int> {using sumT __int…

【华为网络-配置-025】- 同 VLAN 下不同网段通信(启用 Sub 地址)

要求&#xff1a; 1、各接口配置 VLAN 后配置 Sub 地址使 PC1 与 PC3 通信。 一、sub 地址配置 [LSW1]vlan 10 [LSW1]port-group group-member GigabitEthernet 0/0/1 to GigabitEthernet 0/0/2 [LSW1-port-group]port link-type access [LSW1-port-group]port default vla…