vue3組合API中setup、 ref、reactive的使用大全
1.初識setUp的使用
簡單介紹下面的代碼功能:
使用ref函數(shù),去使用監(jiān)聽某一個變量的變化,并且把它渲染到視圖上。
setUp函數(shù)是組合API的入口函數(shù)。這個是非常重要的。
setUp可以去監(jiān)聽變量的變化哈!我們將會利用它
ref 在vue中內(nèi)置,需要導(dǎo)入。
<template>
<div>{{ countNum}}</div>
<button @click="handerFunc">按鈕</button>
</template>
<script>
import {ref} from 'vue'
export default {
name: 'App',
setup() {
// 這一句表示的是定義了一個變量count。這個變量的初始值是100
let countNum=ref(100);
// 在組合API中,如果想定義一個方法,不用定義到methods中去。直接定義就可以了
function handerFunc(){
// console.log(countNum);//countNum是一個對象
countNum.value += 10;
}
//在組合api中定義的方法,或者變量。如果外界需要使用,那么必須通過 return {aaa,func} 的方式暴露出去
return { countNum ,handerFunc}
}
}
</script>

2認(rèn)識reactive的使用
ref函數(shù)只能夠去監(jiān)聽簡單類型的數(shù)據(jù)變化。
不能夠去監(jiān)聽,復(fù)雜類型的變化(數(shù)組、對象)。
所以我們的主角reactive就出現(xiàn)了。
setup 中的函數(shù)會自動執(zhí)行一次。
<template>
<div>
<ul>
<li v-for="item in satte.arr" :key="item.id">
{{item.name }}
</li>
</ul>
</div>
</template>
<script>
import {reactive} from 'vue'
export default {
name: 'App',
setup(){
console.log("setUp會自動執(zhí)行的")
// ref函數(shù)的注意點(diǎn):
// ref函數(shù)只能夠去監(jiān)聽簡單類型的數(shù)據(jù)變化,不能夠去監(jiān)聽,復(fù)雜類型的變化(數(shù)組、對象)
// reactive 方法里面是一個對象
let satte=reactive({
arr:[
{name:"司藤",id:'0011'},
{name:"皮囊之下",id:'0011'},
{name:"百歲之約",id:'0012'},
{name:"三生三世",id:'0013'},
]
})
return { satte }
},
}
</script>
3使用reactive
實(shí)現(xiàn)視圖的刪除
<template>
<div>
<ul>
<li v-for="(item,index) in satte.arr" :key="index" @click="del(index)">
{{item.name }}
</li>
</ul>
</div>
</template>
<script>
import {reactive} from 'vue'
export default {
name: 'App',
setup(){
let satte=reactive({
arr:[
{name:"司藤",id:'0011'},
{name:"皮囊之下",id:'0011'},
{name:"百歲之約",id:'0012'},
{name:"三生三世",id:'0013'},
]
})
// 刪除被點(diǎn)擊的元素
function del(index){
for(let i=0;i<satte.arr.length;i++){
if(index==i){
satte.arr.splice(i,1)
}
}
}
return { satte, del}
},
}
</script>

4將刪除的邏輯分離出去
形成一個單獨(dú)的模塊
<template>
<div>
<ul>
<li v-for="(item,index) in satte.arr" :key="index" @click="del(index)">
{{item.name }}
</li>
</ul>
</div>
</template>
<script>
import {reactive} from 'vue'
export default {
name: 'App',
setup(){
// onlyDelLuoJi() 方法中含有一個數(shù)組 和一個方法;類似于解構(gòu)
let {satte,del }=onlyDelLuoJi();
// 暴露給外界使用
return { satte,del}
},
}
function onlyDelLuoJi(){
let satte=reactive({
arr:[
{name:"司藤",id:'0011'},
{name:"皮囊之下",id:'0011'},
{name:"百歲之約",id:'0012'},
{name:"三生三世",id:'0013'},
]
})
// 刪除被點(diǎn)擊的元素
function del(index){
for(let i=0;i<satte.arr.length;i++){
if(index==i){
satte.arr.splice(i,1)
}
}
}
// 將數(shù)據(jù)satte 和方法 del 暴露出去
return { satte,del }
}
</script>
5. 實(shí)現(xiàn)添加功能
事件之間傳遞參數(shù)
<template>
<div>
<div>
<input type="text" v-model="addobj.watchTv.name">
<button @click="addHander">添加</button>
</div>
<ul>
<li v-for="(item,index) in satte.arr" :key="index" @click="del(index)">
{{item.name }}
</li>
</ul>
</div>
</template>
<script>
import {reactive} from 'vue'
export default {
name: 'App',
setup(){
// onlyDelLuoJi() 方法中含有一個數(shù)組 和一個方法;類似于解構(gòu)
let {satte,del }=onlyDelLuoJi();
// 傳遞參數(shù)satte 是onlyDelLuoJi函數(shù)中提供的satte。進(jìn)行傳遞
let { addobj,addHander }=OnlyaddHander(satte);
// 暴露給外界使用
return { satte,del,addobj, addHander}
},
}
//添加功能模塊
function OnlyaddHander(satte){
console.log('初始化添加',satte)
let addobj=reactive({
watchTv:{
name:"",
id:""
}
});
function addHander(){
// 重置清空 錯吳做法
// satte.arr.push(addobj.watchTv)
// addobj.watchTv.name = "";
// addobj.watchTv.id = "";
// 正確做法
let oldobj = Object.assign({}, addobj.watchTv)
satte.arr.push(oldobj)
}
return { addobj,addHander }
}
//刪除功能模塊
function onlyDelLuoJi(){
console.log('刪除初始化')
let satte=reactive({
arr:[
{name:"司藤",id:'0011'},
{name:"皮囊之下",id:'0011'},
{name:"百歲之約",id:'0012'},
{name:"三生三世",id:'0013'},
]
})
// 刪除被點(diǎn)擊的元素
function del(index){
for(let i=0;i<satte.arr.length;i++){
if(index==i){
satte.arr.splice(i,1)
}
}
}
// 將數(shù)據(jù)satte 和方法 del 暴露出去
return { satte,del }
}
</script>
6 將他們抽離成單獨(dú)的文件
我們想在想將添加刪除相關(guān)的邏輯,單獨(dú)抽離成一個文件。
add.js 是添加相關(guān)的邏輯
del.js 是刪除的相關(guān)邏輯
import { reactive } from "vue"
function OnlyaddHander(satte){
console.log('初始化添加',satte)
let addobj=reactive({
watchTv:{
name:"",
id:""
}
});
function addHander(e){
// 重置清空 錯吳做法
// satte.arr.push(addobj.watchTv)
// addobj.watchTv.name = "";
// addobj.watchTv.id = "";
// 正確做法
let oldobj = Object.assign({}, addobj.watchTv)
satte.arr.push(oldobj)
e.preventDefault();
}
return { addobj,addHander }
}
export default OnlyaddHander
adel.js
import {reactive } from "vue"
function onlyDelLuoJi() {
console.log('刪除初始化')
let satte=reactive({
arr:[
{name:"司藤",id:'0011'},
{name:"皮囊之下",id:'0011'},
{name:"百歲之約",id:'0012'},
{name:"三生三世",id:'0013'},
]
})
// 刪除被點(diǎn)擊的元素
function del(index){
for(let i=0;i<satte.arr.length;i++){
if(index==i){
satte.arr.splice(i,1)
}
}
}
// 將數(shù)據(jù)satte 和方法 del 暴露出去
return { satte,del }
}
export default onlyDelLuoJi
主文件
<template>
<div>
<div>
<input type="text" v-model="addobj.watchTv.name">
<button @click="addHander">添加</button>
</div>
<ul>
<li v-for="(item,index) in satte.arr" :key="index" @click="del(index)">
{{item.name }}
</li>
</ul>
</div>
</template>
<script>
import onlyDelLuoJi from "./components/del"
import OnlyaddHander from "./components/add"
export default {
name: 'App',
setup(){
// onlyDelLuoJi() 方法中含有一個數(shù)組 和一個方法;類似于解構(gòu)
let {satte,del }=onlyDelLuoJi();
// 傳遞參數(shù)
let { addobj,addHander }=OnlyaddHander(satte);
// 暴露給外界使用
return { satte,del,addobj, addHander}
},
}
</script>
以上就是vue3組合API中setup、 ref、reactive的用法的詳細(xì)內(nèi)容,更多關(guān)于vue組合API的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vxe-table?使用?vxe-upload?在表格中實(shí)現(xiàn)非常強(qiáng)大的粘貼上傳圖片和附件功能
本文通過實(shí)例代碼介紹了vxe-table渲染器的強(qiáng)大功能,配合 vxe-upload 上傳,比如復(fù)制或者截圖一張圖片,通過粘貼方式快速粘貼到單元格中,能支持單張、多張、查看、預(yù)覽功能,感興趣的朋友跟隨小編一起看看吧2024-12-12
Vue.js使用v-show和v-if的注意事項(xiàng)
這篇文章一開始先對Vue.js中v-show和v-if兩者的區(qū)別進(jìn)行了簡單的介紹,而后通過圖文詳細(xì)給大家介紹了Vue.js使用v-show和v-if注意的事項(xiàng),有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-12-12
vue.js中Vue-router 2.0基礎(chǔ)實(shí)踐教程
這篇文章主要給大家介紹了關(guān)于vue.js中Vue-router 2.0基礎(chǔ)實(shí)踐的相關(guān)資料,其中包括vue-router 2.0的基礎(chǔ)用法、動態(tài)路由匹配、嵌套路由、編程式路由、命名路由以及命名視圖等相關(guān)知識,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05
Vue3+TypeScript實(shí)現(xiàn)遞歸菜單組件的完整實(shí)例
Vue.js中的遞歸組件是一個可以調(diào)用自己的組件,遞歸組件一般用于博客上顯示評論,形菜單或者嵌套菜單,文章主要給大家介紹了關(guān)于Vue3+TypeScript實(shí)現(xiàn)遞歸菜單組件的相關(guān)資料,需要的朋友可以參考下2021-08-08
Vue項(xiàng)目中使用better-scroll實(shí)現(xiàn)菜單映射功能方法
這篇文章主要介紹了Vue項(xiàng)目中使用better-scroll實(shí)現(xiàn)菜單映射功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
淺談 Vue v-model指令的實(shí)現(xiàn)原理
vue的v-model是一個十分強(qiáng)大的指令,它可以自動讓原生表單組件的值自動和你選擇的值綁定,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06

