可以把 setup 語法糖理解為是使用組合式 API 的地方。
setup
?選項是一個接收?props
?和?context
?的函數,
接收一個props
和context
函數并且將setup
內的內容通過return
暴露給組件的其余部分。
注意
在setup 中:
- 組件自動注冊,不需要額外聲明(自動將文件名定義)
- 不再聲明 beforeCreate 和 create
- 無法使用 this (所以找不到組件實例無法獲取到data、methods等)
- 屬性方法不需要 return
組合式 API 可以提高代碼的復用性與可讀性,使項目更易維護,其中包括:
- 響應式 API:?比如
ref()
?和?reactive()
- 生命周期鉤子:?比如
onMounted()
?和?onUnmounted()
- 依賴注入:比如?
provide()
?和?inject()
- 父子組件之間的交互:
defineProps
?和?defineEmits
、defineExpose
由于在執行 setup函數的時候,還沒有執行 Created 生命周期方法,所以在 setup 函數中,無法使用 data 和 methods 的變量和方法
由于我們不能在 setup函數中使用 data 和 methods,所以 Vue 為了避免我們錯誤的使用,直接將 setup函數中的this 修改成了 undefined
引入
在頁面中,組件API按需引入:
import { ref, watch, toRefs, reactive,toRef, computed, defineEmits } from 'vue';
定義響應式數據
ref 與 reactive
在 setup 中,數據并不是響應式的,所以需要使用 ref 或者 reactive 對數據進行處理,也就是創建響應式數據。