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

vue3?中ref和reactive的區(qū)別講解

 更新時(shí)間:2022年12月19日 09:49:33   作者:wx60d4764eb475e  
如果在template里使用的是ref類(lèi)型的數(shù)據(jù),?那么Vue會(huì)自動(dòng)幫我們添加.value,如果在template里使用的是reactive類(lèi)型的數(shù)據(jù),?那么Vue不會(huì)自動(dòng)幫我們添加.value,這篇文章主要介紹了vue3?中ref和reactive的區(qū)別,需要的朋友可以參考下

1. ref和reactive區(qū)別:
    如果在template里使用的是ref類(lèi)型的數(shù)據(jù), 那么Vue會(huì)自動(dòng)幫我們添加.value
    如果在template里使用的是reactive類(lèi)型的數(shù)據(jù), 那么Vue不會(huì)自動(dòng)幫我們添加.value

   2. Vue是如何決定是否需要自動(dòng)添加.value的
    Vue在解析數(shù)據(jù)之前, 會(huì)自動(dòng)判斷這個(gè)數(shù)據(jù)是否是ref類(lèi)型的,
    如果是就自動(dòng)添加.value, 如果不是就不自動(dòng)添加.value

   3. Vue是如何判斷當(dāng)前的數(shù)據(jù)是否是ref類(lèi)型的
    通過(guò)當(dāng)前數(shù)據(jù)的__v_ref來(lái)判斷的
    如果有這個(gè)私有的屬性, 并且取值為true, 那么就代表是一個(gè)ref類(lèi)型的數(shù)據(jù)

數(shù)據(jù)是ref類(lèi)型

<template>
  <div>
    <p>{{ age }}</p>
    <button @click="Fn">按鈕</button>
  </div>
</template>
 
<script>
import { ref } from "vue";
export default {
  name: "App",
  setup() {
    // ref類(lèi)型在底層會(huì)自動(dòng)轉(zhuǎn)換成reactive類(lèi)型
    // ref(18) -> reactive({value: 18})
    let age = ref(18);
 
    function Fn() {
      age.value = 666;
    console.log(age)
    }
    return { age, Fn };
  },
};
</script>

點(diǎn)擊按鈕,頁(yè)面數(shù)據(jù)變成666了,注意,vue模板中沒(méi)有age.value,因?yàn)閞ef類(lèi)型的數(shù)據(jù)有isRef屬性,底層自動(dòng)會(huì)將.value加上

 數(shù)據(jù)是reactive類(lèi)型

<template>
  <div>
    <p>{{age}}</p>
    <button @click="Fn">按鈕</button>
  </div>
</template>
 
<script>
 
import {reactive} from 'vue';
 
export default {
  name: 'App',
  setup() {
    let age = reactive({value: 18});
    function Fn() {
        age.value = 666;
   console.log(age)
    }
    return {age, Fn}
  }
}
</script>

點(diǎn)擊按鈕,頁(yè)面還是個(gè)對(duì)象數(shù)據(jù),因?yàn)槭莚eactive類(lèi)型數(shù)據(jù),沒(méi)有isRef屬性,vue不會(huì)自動(dòng)在模板添加.value, 所以我們需要手動(dòng)在模板添加age.value

我們?nèi)绾闻袛鄶?shù)據(jù)到底是ref還是reactive?

  通過(guò)isRef / isReactive 方法

<template>
  <div>
    <p>{{age}}</p>
    <button @click="Fn">按鈕</button>
  </div>
</template>
 
<script>
 
  import {reactive} from 'vue';
 
export default {
  name: 'App',
  setup() {
    let age = reactive({value: 18});
    function Fn() {
       console.log(isRef(age)); //false
        console.log(isReactive(age));  //true
        age.value = 666;
    }
    return {age, Fn}
  }
}
</script>

擴(kuò)展知識(shí)點(diǎn):vue3 中 reactive 和 ref 對(duì)比區(qū)別

定于數(shù)據(jù)角度對(duì)比:ref 用來(lái)定義:基本類(lèi)型數(shù)據(jù)
reactive 用來(lái)定義:對(duì)象、或數(shù)組類(lèi)型的數(shù)據(jù)
備注:ref也可以用來(lái)定義對(duì)象或數(shù)組類(lèi)型數(shù)據(jù),它內(nèi)部會(huì)自動(dòng)通過(guò) reactive 轉(zhuǎn)為代理對(duì)象

原理角度對(duì)比:ref 通過(guò) Object.defineProperty() 的 get 與 set 來(lái)實(shí)現(xiàn)響應(yīng)式的(數(shù)據(jù)劫持)
reactive 通過(guò)使用 Proxy 來(lái)實(shí)現(xiàn)響應(yīng)式(數(shù)據(jù)劫持),并通過(guò)Reflect 操作源對(duì)象內(nèi)部的數(shù)據(jù)。

使用角度對(duì)比:ref 定義的數(shù)據(jù):操作數(shù)據(jù)需要 .value,讀取數(shù)據(jù)時(shí)模版中直接讀取不需要 .valuereactive 定義的數(shù)據(jù):操作數(shù)據(jù)與讀取數(shù)據(jù),均不需要 .value

到此這篇關(guān)于vue3 中ref和reactive的區(qū)別講解的文章就介紹到這了,更多相關(guān)vue3 - ref和reactive的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue router 用戶登陸功能的實(shí)例代碼

    vue router 用戶登陸功能的實(shí)例代碼

    這篇文章主要介紹了vue router 用戶登陸功能的實(shí)例代碼,主要用到H5中的會(huì)話存儲(chǔ)(sessionStorage)、vue-router路由前置操作、路由元信息(meta)等知識(shí)點(diǎn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-04-04
  • Vue中l(wèi)ocalStorage的用法和監(jiān)聽(tīng)localStorage值的變化

    Vue中l(wèi)ocalStorage的用法和監(jiān)聽(tīng)localStorage值的變化

    這篇文章主要介紹了Vue中l(wèi)ocalStorage的用法和監(jiān)聽(tīng)localStorage值的變化,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn)

    Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn)

    本文主要介紹了Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 基于vue實(shí)現(xiàn)圖片預(yù)覽功能并顯示在彈窗的最上方

    基于vue實(shí)現(xiàn)圖片預(yù)覽功能并顯示在彈窗的最上方

    這篇文章主要為大家詳細(xì)介紹了如何基于vue實(shí)現(xiàn)圖片預(yù)覽功能并顯示在彈窗的最上方,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • vue 按鈕 權(quán)限控制介紹

    vue 按鈕 權(quán)限控制介紹

    這篇文章主要介紹了vue 按鈕 權(quán)限控制,在日常項(xiàng)目中,會(huì)碰到需要根據(jù)后臺(tái)接口返回的數(shù)據(jù),來(lái)判斷當(dāng)前用戶的操作權(quán)限,必須當(dāng)有刪除權(quán)限時(shí),就顯示刪除按鈕,下面我們就來(lái)了解一下具體的解決方法,需要的朋友也可以參考一下
    2021-12-12
  • vue.js+element-ui動(dòng)態(tài)配置菜單的實(shí)例

    vue.js+element-ui動(dòng)態(tài)配置菜單的實(shí)例

    今天小編就為大家分享一篇vue.js+element-ui動(dòng)態(tài)配置菜單的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • vue實(shí)現(xiàn)購(gòu)物車(chē)功能(商品分類(lèi))

    vue實(shí)現(xiàn)購(gòu)物車(chē)功能(商品分類(lèi))

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)購(gòu)物車(chē)功能,商品分類(lèi),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 教你如何通過(guò)Vue路由改變地址欄的參數(shù)

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

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

    Vue之Watcher源碼解析(1)

    這篇文章主要為大家詳細(xì)介紹了Vue源碼之Watcher的基礎(chǔ)知識(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • vue實(shí)現(xiàn)按鈕的長(zhǎng)按功能

    vue實(shí)現(xiàn)按鈕的長(zhǎng)按功能

    這篇文章主要介紹了vue實(shí)現(xiàn)按鈕的長(zhǎng)按功能,點(diǎn)擊按鈕實(shí)現(xiàn)長(zhǎng)按,用戶需要按下按鈕幾秒鐘,然后觸發(fā)相應(yīng)的事件,本文通過(guò)實(shí)例代碼給大家分享實(shí)現(xiàn)思路,感興趣的朋友一起看看吧
    2022-01-01

最新評(píng)論