最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年06月09日 14:43:32   作者:明月人倚樓  
本文給大家介紹vue3組合API中setup、 ref、reactive的用法,初步了解reactive的使用及具體用法,通過示例代碼給大家介紹的非常詳細(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中定義的方法,或者變量。如果外界需要使用,那么必須通過 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彈出框組件封裝實(shí)例代碼

    vue彈出框組件封裝實(shí)例代碼

    這篇文章主要介紹了vue彈出框組件封裝,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • vxe-table?使用?vxe-upload?在表格中實(shí)現(xiàn)非常強(qiáng)大的粘貼上傳圖片和附件功能

    vxe-table?使用?vxe-upload?在表格中實(shí)現(xiàn)非常強(qiáng)大的粘貼上傳圖片和附件功能

    本文通過實(shí)例代碼介紹了vxe-table渲染器的強(qiáng)大功能,配合 vxe-upload 上傳,比如復(fù)制或者截圖一張圖片,通過粘貼方式快速粘貼到單元格中,能支持單張、多張、查看、預(yù)覽功能,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Vue+Antv?F2實(shí)現(xiàn)層疊柱狀圖

    Vue+Antv?F2實(shí)現(xiàn)層疊柱狀圖

    這篇文章主要為大家詳細(xì)介紹了Vue+Antv?F2實(shí)現(xiàn)層疊柱狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue.js使用v-show和v-if的注意事項(xiàng)

    Vue.js使用v-show和v-if的注意事項(xiàng)

    這篇文章一開始先對(duì)Vue.js中v-show和v-if兩者的區(qū)別進(jìn)行了簡(jiǎn)單的介紹,而后通過圖文詳細(xì)給大家介紹了Vue.js使用v-show和v-if注意的事項(xiàng),有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • VUE登錄注冊(cè)頁(yè)面完整代碼(直接復(fù)制)

    VUE登錄注冊(cè)頁(yè)面完整代碼(直接復(fù)制)

    這篇文章主要給大家介紹了關(guān)于VUE登錄注冊(cè)頁(yè)面的相關(guān)資料,在Vue中可以使用組件來構(gòu)建登錄注冊(cè)頁(yè)面,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • vue.js中Vue-router 2.0基礎(chǔ)實(shí)踐教程

    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ǔ)用法、動(dòng)態(tài)路由匹配、嵌套路由、編程式路由、命名路由以及命名視圖等相關(guān)知識(shí),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05
  • Vue3+TypeScript實(shí)現(xiàn)遞歸菜單組件的完整實(shí)例

    Vue3+TypeScript實(shí)現(xiàn)遞歸菜單組件的完整實(shí)例

    Vue.js中的遞歸組件是一個(gè)可以調(diào)用自己的組件,遞歸組件一般用于博客上顯示評(píng)論,形菜單或者嵌套菜單,文章主要給大家介紹了關(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)菜單映射功能方法

    這篇文章主要介紹了Vue項(xiàng)目中使用better-scroll實(shí)現(xiàn)菜單映射功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 淺談 Vue v-model指令的實(shí)現(xiàn)原理

    淺談 Vue v-model指令的實(shí)現(xiàn)原理

    vue的v-model是一個(gè)十分強(qiáng)大的指令,它可以自動(dòng)讓原生表單組件的值自動(dòng)和你選擇的值綁定,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 教你如何通過Vue路由改變地址欄的參數(shù)

    教你如何通過Vue路由改變地址欄的參數(shù)

    Vue是一款非常流行的JavaScript框架,它提供了許多方便開發(fā)者的功能,本文將介紹如何通過Vue路由改變地址欄的參數(shù),感興趣的朋友跟隨小編一起看看吧
    2023-10-10

最新評(píng)論

泰州市| 平远县| 神农架林区| 延庆县| 神池县| 中宁县| 金秀| 利津县| 德清县| 项城市| 莱芜市| 故城县| 玛曲县| 焉耆| 富民县| 梁平县| 旅游| 海南省| 大名县| 公安县| 油尖旺区| 临高县| 满城县| 桂东县| 灵武市| 建昌县| 东平县| 高雄市| 衡水市| 蓬莱市| 新津县| 陕西省| 扎鲁特旗| 浮梁县| 东莞市| 论坛| 高密市| 泸州市| 罗定市| 芦山县| 封开县|