Vue3.2 setup語法糖及Hook函數基本使用
引言
在2021 年 8 月 5 日,Vue發佈瞭3.2版本的新寫法,其中最主要的亮點就在於setup的語法糖,學過Vue3.0的小夥伴都清楚,當我們在使用Vue3的語法就構建組件的時候,總是需要把外面定義的方法變量必須要return出去,比較麻煩一些,所以Vue官方這次提供瞭setup語法糖,有瞭他,我們可以更加簡潔舒適的去構建組件。
setup(語法糖)
1、基本使用
在vue3.2中我們不再需要進行return,當使用 <script setup>
的時候,任何在 <script setup>
聲明的頂層的綁定 (包括聲明的變量,函數聲明,以及 import 引入的內容) 都可以在模板中直接使用,這是因為在setup
函數中,所有的ES模板都被認為是暴露給上下文的值,並包含在setup()
返回對象中。
要使用這個語法,需要將 setup
屬性添加到 <script>
代碼塊上,示列:
<script setup> import {ref} from 'vue' let property = ref('志拾陸'); </script>
這裡面的代碼會被編譯成組件 setup()
函數的內容,這也就意味著與普通的 <script>
隻在組件被首次引入的時候僅執行一次不同,<script setup>
中的代碼會在每次組件實例被創建的時候執行。這一點非常的重要,也就是寫在 <script setup>
中的代碼,例如初始化的賦值等在組件每次實例創建時都重新執行一次。
2、自動註冊
使用3.2的語法時,如果需要像之前一樣去引入其他組件,就無需再通過components
進行註冊,我們可以直接引入使用。示列:
<template> <subassembly @getChili="getChili" :title="msg" /> </template> <script setup> import {ref} from 'vue' //這裡我們引入瞭子組件 subassembly import subassembly from './subassembly.vue' </script>
3、組件通信
defineProps —-> [用來接收父組件傳來的 props] 代碼示列:
父組件代碼:
<template> <div>我是父組件----1</div> <subassembly @getChili="getChili" :title="msg" /> </template> <script setup> import {ref} from 'vue' import subassembly from './subassembly.vue' //把值傳遞給子組件 ---> :title="msg" <Home @getChili="getChili" :title="msg" /> const msg = ref('父的值') </script>
子組件代碼:
<template> <div>我是子組件----2</div> <div style="color: red">{{props.title}}</div> </template> <script setup> import {defineProps} from 'vue' //接收父組件 傳過來的值! const props = defineProps({ title: { type: String } }); //打印一下 接收父組件的值 console.log(props.title) //父的值 </script>
defineEmit —-> [子組件向父組件事件傳遞] 代碼示列:
子組件代碼:
<template> <hr> <div>我是子組件----2</div> <button @click="toEmits">點擊傳到父組件</button> </template> <script setup> import {defineEmits,ref} from 'vue' //先定義一下子 在發送值 const emits = defineEmits(['getChili']); const toEmits = () => { emits('getChili','子的值') } </script>
父組件代碼:
<template> <div>我是父組件----1</div> <div>{{data}}</div> <subassembly @getChili="getChili" :title="msg" /> </template> <script setup> import {ref} from 'vue' import subassembly from './subassembly.vue' //空值接收 子組件的傳值 let data = ref(null) const getChili = (e) => { data.value = e console.log(e) //子組件的值 } </script>
在標準組件寫法裡,子組件的數據都是默認隱式暴露給父組件的,但在script-setup
模式下,所有數據隻是默認return給template 使用,不會暴露到組件外,所以父組件是無法直接通過掛載ref 變量獲取子組件的數據。如果要調用子組件的數據,需要先在子組件顯示的暴露出來,才能夠正確的拿到,這個操作,就是由defineExpose來完成。
defineExpose —-> [組件暴露出自己的屬性] 代碼示列:
子組件代碼:
<template> <div>我是子組件----2> {{ xiaoZhi.stator }}</div> </template> <script setup> import {ref, defineExpose, reactive} from 'vue' let xiaoZhi = reactive({ stator: '小志', age: 27 }) let xiaoXiaoZhi = ref('小小志'); console.log(xiaoXiaoZhi) defineExpose({ xiaoZhi, xiaoXiaoZhi }) </script>
父組件代碼:
<template> <button @click="shiEmots">獲取暴露</button> <subassembly ref="shield"/> </template> <script setup> import subassembly from './subassembly.vue' import {defineEmits,defineProps,ref} from 'vue' const shield = ref() const shiEmots = () =>{ //子組件接收暴露出來得值 console.log('接收reactive暴漏出來的值',shield.value.xiaoZhi) console.log('接收ref暴漏出來的值',shield.value.xiaoXiaoZhi) } </script>
結果:
hook函數
介紹:
- Vue3 的 hook函數 相當於 vue2 的 mixin, 不同在與 hooks 是函數
- Vue3 的 hook函數 可以幫助我們提高代碼的復用性, 讓我們能在不同的組件中都利用 hooks 函數
示列 :
1、首先我們需要創建一個hooks的文件 文件示列:
2、在hookds文件下,我們創建一個我們需要使用的.js文件 這裡我們比如時usePoint.js
這裡我們在usePoint裡面寫瞭一個獲取鼠標點擊位置的方法 代碼示列:
import {reactive, onMounted, onBeforeUnmount} from 'vue' export default function () { //展示的數據 可以通過App.vue 界面去隱藏 let point = reactive({ x: 0, y: 0 }) //獲取鼠標點擊事件 function savePonint(event) { point.x = event.pageX point.y = event.pageY console.log(event.pageX, event.pageY) } //現實之後調用 掛載完畢 onMounted(() => { window.addEventListener('click', savePonint) }) //在隱藏之前調用 卸載之前 onBeforeUnmount(() => { window.removeEventListener('click', savePonint) }) return point }
我們在組件中引入此文件 代碼示列:
<template> <h3>當前求和:{{ sum }}</h3> <button @click="sum++">點我加一</button> <hr> <h3>當前鼠標點擊坐標為:x:{{ point.x }},y:{{ point.y }}</h3> </template> <script> import {ref} from 'vue' //復用的usePoint import usePoint from "../hooks/usePoint"; export default { name: 'App', setup() { //數據 let sum = ref(0) let point = usePoint() return {sum,point} }, } </script>
結果展示:
總得來說,新引入的setup語法糖的 目的是簡化使用Composition API
時冗長的模板代碼,也就是讓代碼更加簡潔,閱讀性也越高。而在組件中引入並使用自定義hook 自定義hook的作用類似於vue2中的mixin技術 自定義Hook的優勢: 很清楚復用功能代碼的來源, 更清楚易懂!
以上就是Vue3.2 setup語法糖及Hook函數基本使用的詳細內容,更多關於Vue3.2 setup語法糖Hook函數的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Vue3編程流暢技巧使用setup語法糖拒絕寫return
- vue3中單文件組件<script setup>實例詳解
- Vue3常用的通訊方式總結與實例代碼
- 詳解Vue 自定義hook 函數
- vue3:setup語法糖使用教程