vue3中的setup函數(shù)用法及解讀
一、概念
setup是vue3中的一個(gè)新的配置項(xiàng),值為一個(gè)函數(shù),我們?cè)诮M件中用到的數(shù)據(jù)、方法等等,都要配置在setup中。
二、詳解
setup函數(shù)的返回值有兩種
1、返回一個(gè)渲染函數(shù),可以自定義渲染內(nèi)容(用得不多,了解即可)
import {h} from 'vue'
...
setup() {
...
return () => h('h1','學(xué)習(xí)')
}
2、返回一個(gè)對(duì)象,對(duì)象中的屬性和方法在模板中可以直接使用
(1)在vue2的配置中可讀取到vue3配置中的屬性和方法
methods: {
test1() {
console.log(this.sex);
console.log(this.sayHello);
}
},
setup() {
const sex = ref('女')
function sayHello() {
alert('你好啊')
}
return {
sex,
sayHello
}
}

(2)在vue3的配置中不能讀取vue2配置中的屬性和方法
data() {
return {
sex:'男'
}
},
methods: {
sayHello() {
alert('你好啊')
}
},
setup() {
function test2() {
console.log(this.sex);
console.log(this.sayHello);
}
return {
test2
}
}

(3)如果vue2和vue3的配置有沖突,則vue3的setup優(yōu)先
data() {
return {
sex:'男'
}
},
setup() {
const sex = ref('女')
return {
sex
}
}

注意點(diǎn):
(1)vue2和vue3的配置盡量不要混用
(2)setup不能是一個(gè)async函數(shù),因?yàn)榉祷刂挡辉偈莚eturn的對(duì)象, 而是promise, 模板看不到return對(duì)象中的屬性。(后期也可以返回一個(gè)Promise實(shí)例,但需要Suspense和異步組件的配合)
三、兩個(gè)注意點(diǎn)
setup執(zhí)行的時(shí)機(jī)
在beforeCreate之前執(zhí)行一次,this是undefined。
beforeCreate(){
console.log('beforeCreate');
},
setup(){
console.log('setup',this);
}

setup的參數(shù)
1、props:值為對(duì)象,包含:組件外部傳遞過來,且組件內(nèi)部聲明接收了的屬性。
在父組件中給子組件傳遞數(shù)據(jù)
<Demo msg="你好啊" name="tom" />
在子組件中接收
props:['msg','name'], // 需要聲明一下接受到了,否則會(huì)報(bào)警告
setup(props){
console.log(props)
}

并且接收到的數(shù)據(jù)被包裝成一個(gè)代理對(duì)象,能夠?qū)崿F(xiàn)響應(yīng)式。
2、context:上下文對(duì)象
1、attrs: 值為對(duì)象,包含:組件外部傳遞過來,但沒有在props配置中聲明的屬性, 相當(dāng)于 this.$attrs。
父子組件通信過程中,父組件把數(shù)據(jù)傳遞過來,如果子組件沒有用props進(jìn)行接收,就會(huì)出現(xiàn)在attrs中,而vm中沒有

如果用props接收了,則會(huì)出現(xiàn)在vm上而attrs中沒有
props:['msg','name']

2、emit: 分發(fā)自定義事件的函數(shù), 相當(dāng)于 this.$emit。
在父組件中給子組件綁定一個(gè)事件
<Demo @hello="showHelloMsg">
在子組件中觸發(fā)事件并且可以傳值過去
emits:['hello'], // 要聲明接收到了hello事件,否則會(huì)報(bào)警告
context.emit('hello',666)
3、slots: 收到的插槽內(nèi)容, 相當(dāng)于 this.$slots。
<Demo> <template v-slot:qwe> <span>你好</span> </template> </Demo>
vue3里面具名插槽用v-slot:
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue3中的setup()函數(shù)基本使用詳解
- 一文詳解Vue3中的setup函數(shù)的用法和原理
- vue3中<script?setup>?和?setup函數(shù)的區(qū)別對(duì)比
- vue3組合式API中setup()概念和reactive()函數(shù)的用法
- Vue3中的setup語法糖、computed函數(shù)、watch函數(shù)詳解
- Vue3.2?setup語法糖及Hook函數(shù)基本使用
- 詳解Vue3中setup函數(shù)的使用教程
- 關(guān)于vue3中setup函數(shù)的使用
- Vue3中SetUp函數(shù)的參數(shù)props、context詳解
相關(guān)文章
elementUI+vue+printJs實(shí)現(xiàn)頁面表格數(shù)據(jù)打印功能實(shí)例
打印功能是一個(gè)很普遍的需求,這兩天我又遇到了,這篇文章主要介紹了elementUI+vue+printJs實(shí)現(xiàn)頁面表格數(shù)據(jù)打印功能的相關(guān)資料,包括安裝依賴、引用插件、設(shè)置打印區(qū)域div、綁定按鈕事件加載全量數(shù)據(jù)并調(diào)用printJS方法,需要的朋友可以參考下2025-06-06
vue動(dòng)態(tài)的 BreadCrumb 組件el-breadcrumb ElementUI詳解
這篇文章主要介紹了vue如何做一個(gè)動(dòng)態(tài)的 BreadCrumb 組件,el-breadcrumb ElementUI2024-07-07
,本文通過圖文示例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
vue對(duì)象或者數(shù)組中數(shù)據(jù)變化但是視圖沒有更新問題及解決
這篇文章主要介紹了vue對(duì)象或者數(shù)組中數(shù)據(jù)變化但是視圖沒有更新問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Vue-Cli如何在index.html中進(jìn)行環(huán)境判斷
這篇文章主要介紹了Vue-Cli如何在index.html中進(jìn)行環(huán)境判斷問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Vue項(xiàng)目history模式下微信分享爬坑總結(jié)
這篇文章主要介紹了Vue項(xiàng)目history模式下微信分享爬坑總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03
vue將data恢復(fù)到初始狀態(tài) && 重新渲染組件實(shí)例
這篇文章主要介紹了vue將data恢復(fù)到初始狀態(tài) && 重新渲染組件實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09

