耀极客论坛

 找回密码
 立即注册
查看: 3469|回复: 0

强烈推荐!Vue3.2中的setup语法糖

[复制链接]

336

主题

318

帖子

22万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
220553
发表于 2022-5-9 02:31:07 | 显示全部楼层 |阅读模式
  script setup是vue3的新语法糖,并不是新增的功能模块,只是简化了以往的组合式API必须返回(return)的写法,并且有更好的运行时性能,这篇文章主要给大家介绍了关于Vue3.2中setup语法糖的相关资料,需要的朋友可以参考下

前文
  作为一个前端程序员,说起 Vue 3肯定不会陌生,作为时下最火的前端框架之一,很多人将它作为入门框架。
  但是尽管 Vue 3很久之前就已经开始投入使用,也不免会有人抱怨 Vue 3的知识点太多太杂,更新太快。这不,最近 Vue 3又定稿了一项新技术:script-setup 语法糖。

1.什么是setup语法糖
  起初 Vue3.0 暴露变量必须 return 出来,template中才能使用;
  现在只需在script标签中添加setup,组件只需引入不用注册,属性和方法也不用返回,也不用写setup函数,也不用写export default ,甚至是自定义指令也可以在我们的template中自动获得。
  1. ‹template>
  2.   ‹my-component :num="num" @click="addNum" />
  3. ‹/template>
  4. ‹script setup>
  5.   import { ref } from 'vue';
  6.   import MyComponent from './MyComponent .vue';
  7.   // 像在平常的setup中一样的写,但是不需要返回任何变量
  8.   const num= ref(0)       //在此处定义的 num 可以直接使用
  9.   const addNum= () => {   //函数也可以直接引用,不用在return中返回
  10.     num.value++
  11.   }
  12. ‹/script>
  13. //必须使用驼峰命名
复制代码
2.使用setup组件自动注册
  在 script setup 中,引入的组件可以直接使用,无需再通过components进行注册,并且无法指定当前组件的名字,它会自动以文件名为主,也就是不用再写name属性了。示例:
  1. ‹template>
  2.     ‹zi-hello>‹/zi-hello>
  3. ‹/template>
  4. ‹script setup>
  5.   import ziHello from './ziHello'
  6. ‹/script>
复制代码
3.使用setup后新增API
  因为没有了setup函数,那么props,emit怎么获取呢
  setup script语法糖提供了新的API来供我们使用

3.1 defineProps
  用来接收父组件传来的 props。示例:
  父组件代码
  1. ‹template>
  2.   ‹div class="die">
  3.     ‹h3>我是父组件‹/h3>
  4.     ‹zi-hello :name="name">‹/zi-hello>
  5.   ‹/div>
  6. ‹/template>
  7. ‹script setup>
  8.   import ziHello from './ziHello'
  9.   
  10.   import {ref} from 'vue'
  11.   let name = ref('赵小磊========')
  12. ‹/script>
复制代码
  子组件代码
  1. ‹template>
  2.   ‹div>
  3.     我是子组件{{name}} // 赵小磊========
  4.   ‹/div>
  5. ‹/template>
  6. ‹script setup>
  7.   import {defineProps} from 'vue'
  8.   defineProps({
  9.    name:{
  10.      type:String,
  11.      default:'我是默认值'
  12.    }
  13. })
  14. ‹/script>
复制代码
3.2 defineEmits
  子组件向父组件事件传递。示例:
  子组件
  1. ‹template>
  2.   ‹div>
  3.     我是子组件{{name}}
  4.     ‹button @click="ziupdata">按钮‹/button>
  5.   ‹/div>
  6. ‹/template>
  7. ‹script setup>
  8.   import {defineEmits} from 'vue'
  9.   //自定义函数,父组件可以触发
  10.   const em=defineEmits(['updata'])
  11.   const ziupdata=()=>{
  12.     em("updata",'我是子组件的值')
  13.   }
  14. ‹/script>
复制代码
  父组件
  1. ‹template>
  2.   ‹div class="die">
  3.     ‹h3>我是父组件‹/h3>
  4.     ‹zi-hello @updata="updata">‹/zi-hello>
  5.   ‹/div>
  6. ‹/template>
  7. ‹script setup>
  8.   import ziHello from './ziHello'
  9.   
  10.   const updata = (data) => {
  11.     console.log(data); //我是子组件的值
  12.   }
  13. ‹/script>
复制代码
3.3 defineExpose
  组件暴露出自己的属性,在父组件中可以拿到。示例:
  子组件
  1. ‹template>
  2.   ‹div>
  3.     我是子组件
  4.   ‹/div>
  5. ‹/template>
  6. ‹script setup>
  7.   import {defineExpose,reactive,ref} from 'vue'
  8.   let ziage=ref(18)
  9.   let ziname=reactive({
  10.     name:'赵小磊'
  11.   })
  12.   //暴露出去的变量
  13.   defineExpose({
  14.     ziage,
  15.     ziname
  16.   })
  17. ‹/script>
复制代码
  父组件
  1. ‹template>
  2.   ‹div class="die">
  3.     ‹h3 @click="isclick">我是父组件‹/h3>
  4.     ‹zi-hello ref="zihello">‹/zi-hello>
  5.   ‹/div>
  6. ‹/template>
  7. ‹script setup>
  8.   import ziHello from './ziHello'
  9.   import {ref} from 'vue'
  10.   const zihello = ref()
  11.   const isclick = () => {
  12.     console.log('接收ref暴漏出来的值',zihello.value.ziage)
  13.     console.log('接收reactive暴漏出来的值',zihello.value.ziname.name)
  14.   }
  15. ‹/script>
复制代码
  父组件拿到的结果


vue3项目如何开启setup语法糖
  https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar

  1.首先要将编辑器的vetur插件关闭,打开Volar
  2.再新建一个tsconfig.json / jsconfig.json 文件 ,在compilerOptions里面加上 "strict": true,和  "moduleResolution": "node" 配置项就可以啦

总结:
  以上就是对setup语法糖的理解和认识,到此这篇关于Vue3.2中setup语法糖的文章就介绍到这了,更多相关Vue3.2中setup语法糖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|耀极客论坛 ( 粤ICP备2022052845号-2 )|网站地图

GMT+8, 2022-11-29 05:34 , Processed in 0.069475 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表