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

vue3的ref,computed,reactive和toRefs你都了解嗎

 更新時(shí)間:2022年03月21日 15:37:10   作者:不另外加糖  
這篇文章主要為大家詳細(xì)介紹了vue3的ref,computed,reactive和toRefs,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

在vue2中,data函數(shù)里返回的值直接為響應(yīng)式的,但在vue3中我們需要使用一些函數(shù)才能達(dá)到這個(gè)效果。

setup函數(shù)中拿不到vue的this

1、ref 

本質(zhì)為一個(gè)函數(shù),輸入?yún)?shù)為一個(gè)值(原始類型),返回響應(yīng)式的對(duì)象

2、computed

本質(zhì)為一個(gè)函數(shù),輸入?yún)?shù)是一個(gè)函數(shù),可以將我們需要的值作為輸入函數(shù)的返回值

例子:實(shí)現(xiàn)點(diǎn)擊按鈕,屏幕上的數(shù)加1

<template>
  <div id='app'>
    <img alt="vue logo" src="./assets/logo.png">
    <!-- ref對(duì)象在模板中引用時(shí),vue可以直接把內(nèi)部的值展示出來(lái),不需要寫count.value -->
    <h1>{{count}}</h1>
    <h1>{{double}}</h1>
    <button @click='increase'>點(diǎn)擊</button>
  </div>
</template>
<script lang='ts'>
//ref API:是一個(gè)函數(shù),輸入?yún)?shù)為一個(gè)值,返回一個(gè)響應(yīng)式對(duì)象
//computed API:是一個(gè)函數(shù),輸入?yún)?shù)為函數(shù)類型,該輸入函數(shù)中包含咱們需要的值
//reactive:將響應(yīng)式變量包裹在一起,更加清晰
import {computed, ref,reactive} from 'vue'
export default({
  name: 'App', 
  /*data(){
    return{
      count: 0
    }
  },
  methods:{
    increase(){
      this.count++
    }
  }*/
  // 注意:在vue3中不使用data和methods,可以使用ref函數(shù),完成響應(yīng)式
  setup(){
    const count = ref(0)    //將0傳入,返回一個(gè)對(duì)象
    const double = computed(()=>{
      return count.value*2
    })
    const increase = ()=>{
      count.value++         //通過(guò)返回對(duì)象的value屬性獲得響應(yīng)式的數(shù)據(jù)
    }
    return{                 //要在外面使用的變量都要先通過(guò)return導(dǎo)出,才能使用
      count,
      increase,
      double
    }
  }
});
</script>

3、reactive

本質(zhì)為一個(gè)函數(shù),接受一個(gè)object作為傳入?yún)?shù)

上述代碼在setup函數(shù)中,有很多響應(yīng)式數(shù)據(jù),它們都是分散的,我們可以使用reactive將它們都包裹起來(lái)。輸出對(duì)象類型,模板中需要用data.屬性取出來(lái)。

<template>
  <div id='app'>
    <img alt="vue logo" src="./assets/logo.png">
    <h1>{{data.count}}</h1>
    <h1>{{data.double}}</h1>
    <button @click='data.increase'>點(diǎn)擊</button>
  </div>
</template>
<script lang='ts'>
import {computed, ref,reactive} from 'vue'
export default({
  name: 'App', 
  // 注意:在vue3中不使用data和methods,可以使用ref函數(shù),完成響應(yīng)式
  setup(){
    const data = reactive({
      count:0,
      increase:()=>{
        data.count++
      },
      double:computed(()=>
        data.count*2
      )
    })
    return{                 //要在外面使用的變量都要先通過(guò)return導(dǎo)出,才能使用
      data
    }
  }
});
</script>

上述代碼在運(yùn)行時(shí)會(huì)報(bào)錯(cuò),data數(shù)據(jù)類型會(huì)出錯(cuò),這是因?yàn)閮?nèi)部的computed函數(shù)造成的data類型推論循環(huán),需要解決。可以手動(dòng)設(shè)置一個(gè)數(shù)據(jù)類型賦給data。

interface dataProps{
  count:number,
  double:number,
  increase:()=>void
}

繼續(xù)修改上述代碼,發(fā)現(xiàn)模板中每次使用數(shù)據(jù)都需要data.屬性才能取出來(lái),能不能直接用屬性?這時(shí)我們想到了es6的...展開符,但是更改后發(fā)現(xiàn)點(diǎn)擊按鈕,屏幕上的數(shù)字不發(fā)生變化了,數(shù)據(jù)不是響應(yīng)式的了。

這是因?yàn)檫@種方式返回的數(shù)據(jù)都是普通的js數(shù)據(jù)類型,并不是響應(yīng)式的ref數(shù)據(jù)類型,因此我們需要新的方法。

4、toRefs

本質(zhì)為一個(gè)函數(shù),接受一個(gè)reactive函數(shù)作為輸入?yún)?shù),返回一個(gè)ref類型的對(duì)象。

<template>
  <div id='app'>
    <img alt="vue logo" src="./assets/logo.png">
    <!-- ref對(duì)象在模板中引用時(shí),vue可以直接把內(nèi)部的值展示出來(lái),不需要寫count.value -->
    <h1>{{count}}</h1>
    <h1>{{double}}</h1>
    <button @click='increase'>點(diǎn)擊</button>
  </div>
</template>
const refData = toRefs(data)
return{                 //要在外面使用的變量都要先通過(guò)return導(dǎo)出,才能使用
  ...refData
}

這時(shí),我們展開refData,就能實(shí)現(xiàn)響應(yīng)式了。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!  

相關(guān)文章

  • Vuejs實(shí)現(xiàn)購(gòu)物車功能

    Vuejs實(shí)現(xiàn)購(gòu)物車功能

    這篇文章主要為大家詳細(xì)介紹了Vuejs實(shí)現(xiàn)購(gòu)物車功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Vue3使用路由VueRouter4的簡(jiǎn)單示例

    Vue3使用路由VueRouter4的簡(jiǎn)單示例

    在vue.js項(xiàng)目中使用vue-router,可以使用路由進(jìn)行界面或路徑跳轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于Vue3使用路由VueRouter4的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • Vuex數(shù)據(jù)持久化實(shí)現(xiàn)的思路與代碼

    Vuex數(shù)據(jù)持久化實(shí)現(xiàn)的思路與代碼

    Vuex數(shù)據(jù)持久化可以很好的解決全局狀態(tài)管理,當(dāng)刷新后數(shù)據(jù)會(huì)消失,這是我們不愿意看到的。這篇文章主要給大家介紹了關(guān)于Vuex數(shù)據(jù)持久化實(shí)現(xiàn)的思路與代碼,需要的朋友可以參考下
    2021-05-05
  • 一篇文章帶你了解Vue組件的創(chuàng)建和使用

    一篇文章帶你了解Vue組件的創(chuàng)建和使用

    這篇文章主要為大家介紹了Vue組件的創(chuàng)建和使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • Vue之計(jì)算屬性詳解

    Vue之計(jì)算屬性詳解

    這篇文章主要為大家介紹了Vue的計(jì)算屬性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • vue實(shí)現(xiàn)頂部菜單欄

    vue實(shí)現(xiàn)頂部菜單欄

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)頂部菜單欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 基于Vue3實(shí)現(xiàn)的圖片散落效果實(shí)例

    基于Vue3實(shí)現(xiàn)的圖片散落效果實(shí)例

    最近工作中遇到一個(gè)效果還不錯(cuò),所以想著實(shí)現(xiàn)一下,下面這篇文章主要給大家介紹了關(guān)于如何基于Vue3實(shí)現(xiàn)的圖片散落效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Vue文件如何代替?zhèn)鹘y(tǒng)的HTML文件

    Vue文件如何代替?zhèn)鹘y(tǒng)的HTML文件

    隨著前端工程化的不斷推進(jìn),傳統(tǒng)的HTML、CSS、JavaScript三者分離的開發(fā)模式逐漸顯露出一些不足之處,尤其是在構(gòu)建復(fù)雜的單頁(yè)應(yīng)用(SPA)時(shí),Vue.js作為一個(gè)現(xiàn)代化的前端框架,提供了多種工具和技術(shù)來(lái)簡(jiǎn)化開發(fā)流程,本文將探討.vue文件是如何替代傳統(tǒng)HTML文件的角色
    2024-10-10
  • Vue 進(jìn)階教程之v-model詳解

    Vue 進(jìn)階教程之v-model詳解

    這篇文章主要介紹了Vue 進(jìn)階教程之v-model詳解 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 詳解如何在vue-cli中使用vuex

    詳解如何在vue-cli中使用vuex

    這篇文章主要介紹了詳解如何在vue-cli中使用vuex,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論