当前位置:科学 > 正文

盘点Vue3.2的一些常用的setup语法糖

2023-03-25 13:45:58  来源:NativeBase

提示

Vue3.2 版本开始才能使用语法糖!


(相关资料图)

vue3的全新API中,有部分在vue2的基础上沿用了

setup 的简单介绍

起初 Vue3.0 暴露变量必须 return 出来,template中才能使用;

这样会导致在页面上变量会出现很多次,很不友好。

vue3.2只需在script标签中添加setup。

可以帮助我们解决这个问题。

组件只需引入不用注册,属性和方法也不用返回,

也不用写setup函数,也不用写export default ,

甚至是自定义指令也可以在我们的template中自动获得。

响应式:核心

响应式:工具函数

生命周期钩子

如何使用setup语法糖

只需在 script 标签上写上setup
代码如下(示例):
<template></template><script setup></script><style scoped lang="scss"></style>

data数据的使用

由于 setup 不需写 return,所以直接声明数据即可
代码如下(示例):
<script setup>    import {      ref,      reactive,      toRefs,    } from "vue"        const data = reactive({      isShow: false,      testContent: false,      dataList: [],    })        const content = ref("content")    //使用toRefs解构    const { patternVisible, debugVisible, aboutExeVisible } = toRefs(data)</script>

method方法的使用

代码如下(示例):

<template >    <button @click="handleDelete">删除</button></template><script setup>import {reactive} from "vue"const data = reactive({      isShow: false,})// 点击帮助const handleDelete = () => {    console.log(`确定要删除吗`)    data.isShow = true}</script>

watchEffect的用法

代码如下(示例):

<script setup>import {  ref,  watchEffect,} from "vue"let sum = ref(0)watchEffect(()=>{  const x1 = sum.value  console.log("watchEffect所指定的回调执行了")})</script>

watch的用法

代码如下(示例):

<script setup>    import { reactive, watch } from "vue"     //数据     let sum = ref(0)     let msg = ref("你好啊")     let person = reactive({        name:"张三",        age:18,        job:{          j1:{            salary:20          }        }      })    // 两种监听格式    watch([sum,msg],(newValue,oldValue)=>{        console.log("sum或msg变了",newValue,oldValue)    },{immediate:true})    // immediate:true 是否立即执行     watch(()=>person.job,(newValue,oldValue)=>{        console.log("person的job变化了",newValue,oldValue)     },{deep:true})      // deep:true 深度监听</script>

computed计算属性的使用

computed计算属性有两种写法(简写和考虑读写的完整写法)
代码如下(示例):
<script setup>    import { reactive, computed } from "vue"    //数据    let person = reactive({       firstName:"小",       lastName:"叮当"     })    // 计算属性简写    person.fullName = computed(()=>{        return person.firstName + "-" + person.lastName      })     // 完整写法    person.fullName = computed({      get(){        return person.firstName + "-" + person.lastName      },      set(value){        const nameArr = value.split("-")        person.firstName = nameArr[0]        person.lastName = nameArr[1]      }    })</script>

props父子传值的使用

不需要使用setup函数,机智的小伙伴会说:那么子组件怎么接受父组件传递过来的值呢?props,emit怎么获取呢?别担心,新的api出现了,我们的主角 defineProps
代码如下(示例):
<template>  <span>{{props.name}}</span></template><script setup>  import { defineProps } from "vue"  // 声明props  const props = defineProps({    name: {      type: String,      default: "我是默认"    }  })    // 或者  //const props = defineProps(["name"])</script>父组件代码如下(示例):<template>  <child :name="name"/>  </template><script setup>    import {ref} from "vue"    // 引入子组件    import child from "./child.vue"    let name= ref("测试名称")</script>

emit子父传值的使用

子组件怎么向父组件抛出事件?defineEmits的到来!代码如下(示例):
<template>   <a-button @click="isOk">     确定   </a-button></template><script setup>import { defineEmits } from "vue";// emitconst emit = defineEmits(["aboutExeVisible"])/** * 方法 */// 点击确定按钮const isOk = () => {  // 子组件抛出的方法  emit("aboutExeVisible");}</script>父组件代码如下(示例):<template>  <AdoutExe @aboutExeVisible="aboutExeHandleCancel" /></template><script setup>import {reactive} from "vue"// 导入子组件import AdoutExe from "../components/AdoutExeCom"// 关于系统隐藏const aboutExeHandleCancel = () => {    console.log("子组件触发的方法执行了~")}</script>

获取子组件ref变量和defineExpose暴露

即vue2中的获取子组件的ref,直接在父组件中控制子组件方法和变量的方法
代码如下(示例):
<template>    <p>{{data }}</p></template><script setup>import { reactive, toRefs } from "vue"/** * 数据部分 * */const data = reactive({  showDialog: false,})defineExpose({  ...toRefs(data),})</script>父组件代码如下(示例):<template>    <button @click="onClickSetUp">点击</button>    <Content ref="content" /></template><script setup>import {ref} from "vue"// content组件refconst content = ref("content")// 点击设置const onClickSetUp = ({ key }) => {   content.value.showDialog = true}</script><style scoped lang="less"></style>

路由useRoute和useRouter的使用

代码如下(示例):

<script setup>  import { useRoute, useRouter } from "vue-router"      // 声明  const route = useRoute()  const router = useRouter()      // 获取query  console.log(route.query)  // 获取params  console.log(route.params)  // 路由跳转  router.push({      path: `/index`  })</script>

store仓库的使用

代码如下(示例):

<script setup>  import { useStore } from "vuex"  import { num } from "../store/index"  const store = useStore(num)      // 获取Vuex的state  console.log(store.state.number)  // 获取Vuex的getters  console.log(store.state.getNumber)    // 提交mutations  store.commit("fnName")    // 分发actions的方法  store.dispatch("fnName")</script>

await的支持

setup 语法糖中可直接使用 await,不需要写 async , setup 会自动变成 async setup
代码如下(示例):
<script setup>  import Api from "../api/Api"  const data = await Api.getData()  console.log(data)</script>

provide 和 inject 祖孙传值

父组件代码如下(示例):
<template>  <AdoutExe /></template><script setup>  import { ref,provide } from "vue"  import AdoutExe from "@/components/AdoutExeCom"  let name = ref("Jerry")  // 使用provide  provide("provideState", {    name,    changeName: () => {      name.value = "小叮当"    }  })</script>子组件代码如下(示例):<script setup>  import { inject } from "vue"  const provideState = inject("provideState")  provideState.changeName()</script>

新增指令 v-memo

v-memod会记住一个模板的子树,元素和组件上都可以使用。该指令接收一个固定长度的数组作为依赖值进行[记忆比对]。如果数组中的每个值都和上次渲染的时候相同,则整个子树的更新会被跳过。即使是虚拟 DOM 的 VNode 创建也将被跳过,因为子树的记忆副本可以被重用。因此渲染的速度会非常的快。需要注意得是:正确地声明记忆数组是很重要。开发者有责任指定正确的依赖数组,以避免必要的更新被跳过。<li v-for="item in listArr"  :key="item.id"  v-memo="["valueA","valueB"]">    {{ item.name   }}</li>v-memod的指令使用较少,它的作用是:缓存模板中的一部分数据。只创建一次,以后就不会再更新了。也就是说用内存换取时间。

style v-bind

经过尤大大和团队的努力,<style> v-bind 已经从实验室毕业了。我们可以使用这个属性了。爽歪歪!我们可以在style中去使用变量。是不是感觉很牛逼呀!现在我们用起来,第一次使用<style> v-bind
v-bind将span变成红色
<template>  <span> 我是一只小小鸟 </span>  </template><script setup>  import { reactive } from "vue"  const state = reactive({    color: "red"  })</script><style scoped>  span {    /* 使用v-bind绑定state中的变量 */    color: v-bind("state.color");  }  </style>

关键词:

推荐阅读

pvc是什么 生产pvc的上市公司都有哪些?

pvc是什么pvc中文名是聚氯乙烯,曾是世界上产量最大的通用塑料,在建筑材料、日用品、管材等领域应用,市场十分广泛。那么,A股市场中生产p 【详细】

搜狗正式并入腾讯 搜狗公司简介

搜狗正式并入腾讯前段时间,一直有消息传出,腾讯即将收购搜狗,近日,搜狗正式并入腾讯的消息冲上了热搜榜单,吸引了众多网友关注,具体是 【详细】

中国古代十大名刀是什么 中国古代十大名刀简介

中国几乎所有的朝代都有记载名刀诞生的记录。从初唐大一统战争到盛唐的一切内外战争都出现过冷兵器——唐刀,史上对后世影响很大。中国古代 【详细】

动力天文台最新拍摄到一个超级日冕洞 ​日冕出现在哪里?

动力天文台最新拍摄到一个超级日冕洞据国外媒体报道,天文学家观测到的日冕洞犹如太阳表面蔓延一个巨大的深坑,10月15日,美国宇航局太阳动 【详细】

鲁班发明了什么东西 什么是鲁班发明的?

鲁班发明了什么东西?在鲁班之前,木匠只用斧子和刀子来平整他们建筑用的木材,即使干的很好,也难让人满意。后来通过长期实践,鲁班发现使 【详细】

关于我们  |  联系方式  |  免责条款  |  招聘信息  |  广告服务  |  帮助中心

联系我们:85 572 98@qq.com备案号:粤ICP备18023326号-40

科技资讯网 版权所有