欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3組合API中setup、 ref、reactive的使用大全

 更新時(shí)間:2021年06月09日 14:43:32   作者:明月人倚樓  
本文給大家介紹vue3組合API中setup、 ref、reactive的用法,初步了解reactive的使用及具體用法,通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧

1.初識(shí)setUp的使用

簡(jiǎn)單介紹下面的代碼功能:
使用ref函數(shù),去使用監(jiān)聽某一個(gè)變量的變化,并且把它渲染到視圖上。
setUp函數(shù)是組合API的入口函數(shù)。這個(gè)是非常重要的。
setUp可以去監(jiān)聽變量的變化哈!我們將會(huì)利用它
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() {
    // 這一句表示的是定義了一個(gè)變量count。這個(gè)變量的初始值是100
    let countNum=ref(100);

    // 在組合API中,如果想定義一個(gè)方法,不用定義到methods中去。直接定義就可以了
    function handerFunc(){
      // console.log(countNum);//countNum是一個(gè)對(duì)象
      countNum.value += 10;
    }
    //在組合api中定義的方法,或者變量。如果外界需要使用,那么必須通過(guò) return  {aaa,func} 的方式暴露出去
    return { countNum ,handerFunc}
  }
}
</script>

2認(rèn)識(shí)reactive的使用

ref函數(shù)只能夠去監(jiān)聽簡(jiǎn)單類型的數(shù)據(jù)變化。
不能夠去監(jiān)聽,復(fù)雜類型的變化(數(shù)組、對(duì)象)。
所以我們的主角reactive就出現(xiàn)了。
setup 中的函數(shù)會(huì)自動(dòng)執(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會(huì)自動(dòng)執(zhí)行的")
    // ref函數(shù)的注意點(diǎn):
    // ref函數(shù)只能夠去監(jiān)聽簡(jiǎn)單類型的數(shù)據(jù)變化,不能夠去監(jiān)聽,復(fù)雜類型的變化(數(shù)組、對(duì)象)
    // reactive  方法里面是一個(gè)對(duì)象
    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將刪除的邏輯分離出去

形成一個(gè)單獨(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() 方法中含有一個(gè)數(shù)組 和一個(gè)方法;類似于解構(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() 方法中含有一個(gè)數(shù)組 和一個(gè)方法;類似于解構(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(){
      // 重置清空 錯(cuò)吳做法
        // 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ú)抽離成一個(gè)文件。
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){
        // 重置清空 錯(cuò)吳做法
        // 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() 方法中含有一個(gè)數(shù)組 和一個(gè)方法;類似于解構(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的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文搞懂vue中provide和inject實(shí)現(xiàn)原理對(duì)抗平庸

    一文搞懂vue中provide和inject實(shí)現(xiàn)原理對(duì)抗平庸

    這篇文章主要為大家介紹了vue中provide和inject實(shí)現(xiàn)原理的深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 解決vue 退出動(dòng)畫無(wú)效的問(wèn)題

    解決vue 退出動(dòng)畫無(wú)效的問(wèn)題

    這篇文章主要介紹了解決vue 退出動(dòng)畫無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • vue如何動(dòng)態(tài)給data中添加變量

    vue如何動(dòng)態(tài)給data中添加變量

    這篇文章主要介紹了vue如何動(dòng)態(tài)給data中添加變量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 詳解解決使用axios發(fā)送json后臺(tái)接收不到的問(wèn)題

    詳解解決使用axios發(fā)送json后臺(tái)接收不到的問(wèn)題

    這篇文章主要介紹了詳解解決使用axios發(fā)送json后臺(tái)接收不到的問(wèn)題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 解讀vue生成的文件目錄結(jié)構(gòu)及說(shuō)明

    解讀vue生成的文件目錄結(jié)構(gòu)及說(shuō)明

    本篇文章主要介紹了解讀vue生成的文件目錄結(jié)構(gòu)及說(shuō)明,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • 詳解vue-cli中配置sass

    詳解vue-cli中配置sass

    本篇文章主要介紹了詳解vue-cli中配置sass ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Vue使用Axios進(jìn)行跨域請(qǐng)求的方法詳解

    Vue使用Axios進(jìn)行跨域請(qǐng)求的方法詳解

    在開發(fā)現(xiàn)代?Web?應(yīng)用時(shí),前端和后端通常分離部署在不同的服務(wù)器上,這就會(huì)引發(fā)跨域請(qǐng)求問(wèn)題,所以本文將詳細(xì)介紹如何在?Vue?項(xiàng)目中使用?Axios?發(fā)起跨域請(qǐng)求時(shí)解決跨域問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • VueJs組件prop驗(yàn)證簡(jiǎn)單介紹

    VueJs組件prop驗(yàn)證簡(jiǎn)單介紹

    今天看了vuejs的組件,看到了prop組件,主要作用是在傳入數(shù)據(jù)的時(shí)候?qū)魅氲闹底雠袛?,今天小編通過(guò)一個(gè)小例子給大家分享VueJs組件prop驗(yàn)證簡(jiǎn)單理解,感興趣的朋友一起看看吧
    2017-09-09
  • Vue中關(guān)于computed計(jì)算屬性的妙用

    Vue中關(guān)于computed計(jì)算屬性的妙用

    這篇文章主要介紹了Vue中關(guān)于computed計(jì)算屬性的妙用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • VueJs里利用CryptoJs實(shí)現(xiàn)加密及解密的方法示例

    VueJs里利用CryptoJs實(shí)現(xiàn)加密及解密的方法示例

    這篇文章主要介紹了VueJs里利用CryptoJs實(shí)現(xiàn)加密及解密的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04

最新評(píng)論