前端vue3?setup使用教程
vue3 中新增了 setup,它的出現(xiàn)是為了解決組件內(nèi)容龐大后,理解和維護(hù)組件變得困難的問(wèn)題。即 vue 中 data、computed、methods、watch 等內(nèi)容非常多以后,同一業(yè)務(wù)邏輯的 data 中的數(shù)據(jù)和 methods 中的方法在 vue 文件中“相隔甚遠(yuǎn)”,看代碼時(shí),經(jīng)常需要根據(jù) data 中的數(shù)據(jù)去搜索找到對(duì)應(yīng)的 methods 方法,上下跳躍查看代碼,非常不方便。而在 setup 中,則可以把 data 中的數(shù)據(jù)和 methods 方法寫(xiě)在相臨的位置,方便查看和維護(hù)。
1、簡(jiǎn)單使用
先簡(jiǎn)單寫(xiě)一下看看效果
筆者這里使用新建的 vue3 項(xiàng)目,直接在 App.vue 上進(jìn)行修改
<template>
<div>{{name}}</div>
</template>
<script>
export default {
setup() {
return {
name: "淚眼問(wèn)花花不語(yǔ),亂紅飛過(guò)秋千去"
}
}
}
</script>原來(lái)寫(xiě)在 data 中的 name,在 setup 中需要 return 返回
運(yùn)行效果

2、修改 setup 中的變量值
先看下面代碼,再說(shuō)在 setup 中如何修改
<template>
<div>
{{name}}
<button @click="change">修改</button>
</div>
</template>
<script>
export default {
setup() {
let name = "淚眼問(wèn)花花不語(yǔ),亂紅飛過(guò)秋千去"
function change() {
name = "人生自是有情癡,此恨不關(guān)風(fēng)與月"
}
return {
name,
change
}
}
}
</script>按照常規(guī)邏輯,修改 setup 中的 name,會(huì)自然地寫(xiě)出上面的代碼
但是這段代碼是不能完成 name 值的修改的,看運(yùn)行效果

為什么 name 值沒(méi)有改變呢?因?yàn)樯厦娲a中 name 是非響應(yīng)式的
如果想要修改 name 值,就需要把它改成響應(yīng)式的,代碼如下
<template>
<div>
{{name}}
<button @click="change">修改</button>
</div>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
let name = ref("淚眼問(wèn)花花不語(yǔ),亂紅飛過(guò)秋千去")
function change() {
name.value = "人生自是有情癡,此恨不關(guān)風(fēng)與月"
}
return {
name,
change
}
}
}
</script>使用 ref 對(duì) name 進(jìn)行包裝
修改時(shí)使用 變量名.value 的語(yǔ)法
運(yùn)行效果

除了使用 ref 外還可以使用 reactive ,二者都可以將原始數(shù)據(jù)類(lèi)型轉(zhuǎn)換成一個(gè)帶有響應(yīng)式特性的數(shù)據(jù)類(lèi)型
ref 和 reactive 有什么區(qū)別,ref 一般處理基本類(lèi)型;reactive 處理復(fù)雜的數(shù)據(jù)類(lèi)型
reactive 使用代碼
<template>
<div>
{{nameObj.name}}
<button @click="change">修改</button>
</div>
</template>
<script>
import {reactive} from 'vue'
export default {
setup() {
let nameObj = reactive({name: '今年花勝去年紅??上髂昊ǜ?,知與誰(shuí)同'})
function change() {
nameObj.name = "離愁漸遠(yuǎn)漸無(wú)窮,迢迢不斷如春水"
}
return {
nameObj,
change
}
}
}
</script>運(yùn)行效果

3、setup 形式下的父子組件通信
代碼寫(xiě)成 setup 形式,如何實(shí)現(xiàn)父子組件通信,下面介紹
3.1、父?jìng)髯?/h3>
在 components 目錄下新建 Article.vue 作為子組件
Article.vue 內(nèi)容
<template>
<div>
{{msg}}
{{info}}
</div>
</template>
<script>
export default {
props:['msg'],
setup(props) {
console.log(props.msg)
return {
info:props.msg
}
}
}
</script>在 setup 方法內(nèi)使用 props 來(lái)接收父組件傳過(guò)來(lái)的數(shù)據(jù)
App.vue 為父組件
在 App.vue 中引入 Article.vue
<template>
<div>
<Article :msg="name"></Article>
</div>
</template>
<script>
import Article from '@/components/Article.vue'
export default {
components: {
Article
},
setup() {
return {
name: '漸行漸遠(yuǎn)漸無(wú)書(shū),水闊魚(yú)沉何處問(wèn)'
}
}
}
</script>運(yùn)行效果

3.2、子傳父
3.2.1、子組件調(diào)用父組件方法
Article.vue 內(nèi)容
<template>
<div>
{{msg}}
<button @click="sendToParent">子組件向父組件傳遞數(shù)據(jù)</button>
</div>
</template>
<script>
export default {
props:['msg'],
setup(props, content) {
console.log(props.msg)
function sendToParent() {
content.emit('change')
}
return {
sendToParent
}
}
}
</script>使用 setup 方法中 content 參數(shù)中的 emit
App.vue 內(nèi)容
<template>
<div>
<Article :msg="name" @change="changeName"></Article>
</div>
</template>
<script>
import Article from '@/components/Article.vue'
export default {
components: {
Article
},
setup() {
function changeName() {
alert('父組件事件被調(diào)用')
}
return {
name: '漸行漸遠(yuǎn)漸無(wú)書(shū),水闊魚(yú)沉何處問(wèn)',
changeName
}
}
}
</script>運(yùn)行效果

3.2.2、子組件向父組件傳遞數(shù)據(jù)
子組件向父組件傳遞數(shù)據(jù),父組件修改數(shù)據(jù)
Article.vue 內(nèi)容
<template>
<div>
{{msg}}
<button @click="sendToParent">子組件向父組件傳遞數(shù)據(jù)</button>
</div>
</template>
<script>
export default {
props:['msg'],
setup(props, content) {
console.log(props.msg)
let newName = '群芳過(guò)后西湖好,狼籍殘紅。飛絮濛濛。垂柳闌干盡日風(fēng)'
function sendToParent() {
content.emit('change', newName)
}
return {
sendToParent
}
}
}
</script>App.vue 內(nèi)容
<template>
<div>
<Article :msg="name" @change="changeName"></Article>
</div>
</template>
<script>
import Article from '@/components/Article.vue'
import {ref} from 'vue'
export default {
components: {
Article
},
setup() {
let name = ref('漸行漸遠(yuǎn)漸無(wú)書(shū),水闊魚(yú)沉何處問(wèn)')
function changeName(msg) {
name.value = msg
}
return {
name,
changeName
}
}
}
</script>App.vue 中的 name 要修改,所以使用 ref 包裝
運(yùn)行效果

4、setup 中使用生命周期函數(shù)
在 setup 里,生命周期鉤子前面加上 “on” 來(lái)訪(fǎng)問(wèn)組件的生命周期鉤子
setup 是圍繞 beforeCreate 和 created 生命周期鉤子運(yùn)行的,所以不需要顯式地定義它們
setup 內(nèi)部調(diào)用生命周期鉤子

代碼示例
<template>
<div></div>
</template>
<script>
import { onBeforeMount, onMounted } from "vue"
export default {
setup() {
onBeforeMount(()=>{
console.log('onBeforeMount')
})
onMounted(()=>{
console.log('mouted')
})
return {}
}
}
</script>運(yùn)行效果

以上就是前端vue3架構(gòu)setup使用教程的詳細(xì)內(nèi)容,更多關(guān)于vue3 setup教程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue.js中window.onresize的超詳細(xì)使用方法
這篇文章主要給大家介紹了關(guān)于vue.js中window.onresize的超詳細(xì)使用方法,window.onresize 是直接給window的onresize屬性綁定事件,只能有一個(gè),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
vue3+ts實(shí)際開(kāi)發(fā)中該如何優(yōu)雅書(shū)寫(xiě)vue3語(yǔ)法
近嘗試上手 Vue3+TS+Vite,所以下面這篇文章主要給大家介紹了關(guān)于vue3+ts實(shí)際開(kāi)發(fā)中該如何優(yōu)雅書(shū)寫(xiě)vue3語(yǔ)法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
解決vue?app.js/vender.js過(guò)大優(yōu)化啟動(dòng)頁(yè)
這篇文章主要為大家介紹了解決vue?app.js/vender.js過(guò)大優(yōu)化啟動(dòng)頁(yè)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
詳解vue-router 2.0 常用基礎(chǔ)知識(shí)點(diǎn)之router-link
這篇文章主要介紹了詳解vue-router 2.0 常用基礎(chǔ)知識(shí)點(diǎn)之router-link,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Vue3路由進(jìn)階實(shí)戰(zhàn)教程之參數(shù)傳遞與導(dǎo)航守衛(wèi)核心技術(shù)
本文介紹了路由參數(shù)傳遞的進(jìn)階應(yīng)用技巧,包括路由配置與參數(shù)驗(yàn)證、組件參數(shù)接收、查詢(xún)參數(shù)傳遞、導(dǎo)航守衛(wèi)以及性能優(yōu)化與最佳實(shí)踐,感興趣的朋友一起看看吧2025-03-03
關(guān)于vue.extend的使用及說(shuō)明
這篇文章主要介紹了關(guān)于vue.extend的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
vue中實(shí)現(xiàn)動(dòng)態(tài)生成二維碼的方法
這篇文章主要介紹了vue中實(shí)現(xiàn)動(dòng)態(tài)生成二維碼的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Vue雙向數(shù)據(jù)綁定與響應(yīng)式原理深入探究
本節(jié)介紹雙向數(shù)據(jù)綁定以及響應(yīng)式的原理,回答了雙向數(shù)據(jù)綁定和數(shù)據(jù)響應(yīng)式是否相同,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-08-08
vue?+?electron應(yīng)用文件讀寫(xiě)操作
這篇文章主要介紹了vue?+?electron應(yīng)用文件讀寫(xiě)操作,如果要制作的應(yīng)用并不復(fù)雜,完全可以將數(shù)據(jù)存儲(chǔ)在本地文件當(dāng)中,然后應(yīng)用就可以通過(guò)這些文件進(jìn)行數(shù)據(jù)的讀寫(xiě),需要的朋友參考下吧2022-06-06

