Vue3.2 setup语法糖总结

前言

提醒:Vue3.2 版本开始能力应用语法糖!
Vue3.0 中变量必须 return 进去,template中能力应用;而在 Vue3.2 中只须要在 script 标签上加上 setup 属性,无需 returntemplate 便可间接应用,十分的香啊!

提醒:以下是本篇文章正文内容,上面案例可供参考

一、如何应用setup语法糖

只需在 script 标签上写上setup

代码如下(示例):
<template></template><script setup></script><style scoped lang="less"></style>

二、data数据的应用

因为 setup 不需写 return,所以间接申明数据即可

代码如下(示例):
<script setup>    import {      ref,      reactive,      toRefs,    } from 'vue'        const data = reactive({      patternVisible: false,      debugVisible: false,      aboutExeVisible: false,    })        const content = ref('content')    //应用toRefs解构    const { patternVisible, debugVisible, aboutExeVisible } = toRefs(data)</script>

三、method办法的应用

代码如下(示例):
<template >    <button @click="onClickHelp">零碎帮忙</button></template><script setup>import {reactive} from 'vue'const data = reactive({      aboutExeVisible: false,})// 点击帮忙const onClickHelp = () => {    console.log(`零碎帮忙`)    data.aboutExeVisible = 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})               watch(()=>person.job,(newValue,oldValue)=>{        console.log('person的job变动了',newValue,oldValue)     },{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父子传值的应用

子组件代码如下(示例):
<template>  <span>{{props.name}}</span></template><script setup>  import { defineProps } from 'vue'  // 申明props  const props = defineProps({    name: {      type: String,      default: '11'    }  })    // 或者  //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子父传值的应用

子组件代码如下(示例):
<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 data = reactive({  aboutExeVisible: false, })// content组件ref// 对于零碎暗藏const aboutExeHandleCancel = () => {  data.aboutExeVisible = false}</script>

九、获取子组件ref变量和defineExpose裸露

即vue2中的获取子组件的ref,间接在父组件中管制子组件办法和变量的办法

子组件代码如下(示例):
<template>    <p>{{data }}</p></template><script setup>import {  reactive,  toRefs} from 'vue'/** * 数据局部 * */const data = reactive({  modelVisible: false,  historyVisible: false,   reportVisible: 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.modelVisible = 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,不须要写 asyncsetup 会主动变成 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>

总结

提醒:这里对文章进行总结:

例如:以上就是我本人找博客什么的学习setup语法糖进行的总结,在我的项目中都进行了应用是能够实现的,如果哪里我写错了或者我的办法应用不对大家通知我,我会马上改哒!如果大家感觉我写的文章还能够很实用,欢送大家点赞珍藏关注呀关注博主不迷路哦!工作不忙的话会继续更新哒!欢送大家看看小叮当的其它文章~