一文搞懂Vue3.2中setup語法糖使用
前言
提示:Vue3.2 版本開始才能使用語法糖!在 Vue3.0
中變量必須 return
出來,template
中才能使用;而在 Vue3.2
中只需要在 script
標(biāo)簽上加上 setup
屬性,無需 return
,template
便可直接使用,非常的香??!
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、如何使用setup語法糖
只需在 script
標(biāo)簽上寫上setup
代碼如下(示例):
<template> </template> <script setup> </script> <style scoped lang="less"> </style>
二、data數(shù)據(jù)的使用
由于 setup
不需寫 return
,所以直接聲明數(shù)據(jù)即可
代碼如下(示例):
<script setup> import { ref, reactive, toRefs, } from 'vue' const data = reactive({ patternVisible: false, debugVisible: false, aboutExeVisible: false, }) const content = ref('content') //使用toRefs解構(gòu) const { patternVisible, debugVisible, aboutExeVisible } = toRefs(data) </script>
三、method方法的使用
代碼如下(示例):
<template > <button @click="onClickHelp">系統(tǒng)幫助</button> </template> <script setup> import {reactive} from 'vue' const data = reactive({ aboutExeVisible: false, }) // 點(diǎn)擊幫助 const onClickHelp = () => { console.log(`系統(tǒng)幫助`) data.aboutExeVisible = true } </script>
四、watchEffect的使用
代碼如下(示例):
<script setup> import { ref, watchEffect, } from 'vue' let sum = ref(0) watchEffect(()=>{ const x1 = sum.value console.log('watchEffect所指定的回調(diào)執(zhí)行了') }) </script>
五、watch的使用
代碼如下(示例):
<script setup> import { reactive, watch, } from 'vue' //數(shù)據(jù) let sum = ref(0) let msg = ref('你好啊') let person = reactive({ name:'張三', age:18, job:{ j1:{ salary:20 } } }) // 兩種監(jiān)聽格式 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計(jì)算屬性的使用
computed計(jì)算屬性有兩種寫法(簡(jiǎn)寫和考慮讀寫的完整寫法)
代碼如下(示例):
<script setup> import { reactive, computed, } from 'vue' //數(shù)據(jù) let person = reactive({ firstName:'小', lastName:'叮當(dāng)' }) // 計(jì)算屬性簡(jiǎn)寫 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('小叮當(dāng)') </script>
八、emit子父?jìng)髦档氖褂?/h2>
子組件代碼如下(示例):
<template> <a-button @click="isOk"> 確定 </a-button> </template> <script setup> import { defineEmits } from 'vue'; // emit const emit = defineEmits(['aboutExeVisible']) /** * 方法 */ // 點(diǎn)擊確定按鈕 const isOk = () => { emit('aboutExeVisible'); } </script>
父組件代碼如下(示例):
<template> <AdoutExe @aboutExeVisible="aboutExeHandleCancel" /> </template> <script setup> import {reactive} from 'vue' // 導(dǎo)入子組件 import AdoutExe from '../components/AdoutExeCom' const data = reactive({ aboutExeVisible: false, }) // content組件ref // 關(guān)于系統(tǒng)隱藏 const aboutExeHandleCancel = () => { data.aboutExeVisible = false } </script>
九、獲取子組件ref變量和defineExpose暴露
即vue2中的獲取子組件的ref,直接在父組件中控制子組件方法和變量的方法
子組件代碼如下(示例):
<template> <p>{{data }}</p> </template> <script setup> import { reactive, toRefs } from 'vue' /** * 數(shù)據(jù)部分 * */ const data = reactive({ modelVisible: false, historyVisible: false, reportVisible: false, }) defineExpose({ ...toRefs(data), }) </script>
父組件代碼如下(示例):
<template> <button @click="onClickSetUp">點(diǎn)擊</button> <Content ref="content" /> </template> <script setup> import {ref} from 'vue' // content組件ref const content = ref('content') // 點(diǎn)擊設(shè)置 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) // 路由跳轉(zhuǎn) router.push({ path: `/index` }) </script>
十一、store倉(cāng)庫(kù)的使用
代碼如下(示例):
<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') // 分發(fā)actions的方法 store.dispatch('fnName') </script>
十二、await 的支持
setup
語法糖中可直接使用 await
,不需要寫 async
, setup
會(huì)自動(dòng)變成 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 = '小叮當(dāng)' } }) </script>
子組件代碼如下(示例):
<script setup> import { inject } from 'vue' const provideState = inject('provideState') provideState.changeName() </script>
以上就是一文搞懂Vue3.2中setup語法糖使用的詳細(xì)內(nèi)容,更多關(guān)于Vue setup語法糖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue3新特性之在Composition API中使用CSS Modules
這篇文章主要介紹了Vue3新特性之在Composition API中使用CSS Modules,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07vue+elementui實(shí)現(xiàn)下拉表格多選和搜索功能
這篇文章主要為大家詳細(xì)介紹了vue+elementui實(shí)現(xiàn)下拉表格多選和搜索功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11前端項(xiàng)目中的Vue、React錯(cuò)誤監(jiān)聽
這篇文章主要介紹了前端項(xiàng)目中的Vue、React錯(cuò)誤監(jiān)聽,文章圍繞主題的相關(guān)資料展開詳細(xì)內(nèi)容介紹需要的小伙伴可以參考一下2022-04-04vue移動(dòng)端時(shí)彈出側(cè)邊抽屜菜單效果
這篇文章主要介紹了vue移動(dòng)端時(shí)彈出側(cè)邊抽屜菜單,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06vue elementui el-form rules動(dòng)態(tài)驗(yàn)證的實(shí)例代碼詳解
在使用elementUI el-form 中,對(duì)于業(yè)務(wù)不同的時(shí)候可能會(huì)產(chǎn)生不同表單結(jié)構(gòu),但是都是存在同一個(gè)表單控件el-form中。這篇文章主要介紹了vue elementui el-form rules動(dòng)態(tài)驗(yàn)證的實(shí)例代碼,需要的朋友可以參考下2019-05-05vue3中輕松實(shí)現(xiàn)switch功能組件的全過程
這篇文章主要給大家介紹了關(guān)于vue3中輕松實(shí)現(xiàn)switch功能組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01淺談vue權(quán)限管理實(shí)現(xiàn)及流程
這篇文章主要介紹了淺談vue權(quán)限管理實(shí)現(xiàn)及流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04