vue3中ref和reactive的區別(系列六)


  1. ref和reactive區別:
    如果在template里使用的是ref類型的數據, 那么Vue會自動幫我們添加.value
    如果在template里使用的是reactive類型的數據, 那么Vue不會自動幫我們添加.value

   2. Vue是如何決定是否需要自動添加.value的
    Vue在解析數據之前, 會自動判斷這個數據是否是ref類型的,
    如果是就自動添加.value, 如果不是就不自動添加.value

   3. Vue是如何判斷當前的數據是否是ref類型的
    通過當前數據的__v_ref來判斷的
    如果有這個私有的屬性, 並且取值為true, 那么就代表是一個ref類型的數據

數據是ref類型

<template>
  <div>
    <p>{{ age }}</p>
    <button @click="myFn">按鈕</button>
  </div>
</template>

<script>
import { ref } from "vue";
export default {
  name: "App",
  setup() {
    // ref類型在底層會自動轉換成reactive類型 // ref(18) -> reactive({value: 18})
    let age = ref(18);

    function myFn() {
      age.value = 666;
    console.log(age) }
return { age, myFn }; }, }; </script> <style></style>

效果,點擊按鈕,頁面數據變成666了,注意,vue模板中沒有age.value,因為ref類型的數據有isRef屬性,底層自動會將.value加上。

 

 

 數據是reactive類型

<template>
  <div>
    <p>{{age}}</p>
    <button @click="myFn">按鈕</button>
  </div>
</template>

<script>

  import {reactive} from 'vue';

export default {
  name: 'App',
  setup() {
    let age = reactive({value: 18});
    function myFn() {
        age.value = 666;
      console.log(age) }
return {age, myFn} } } </script> <style> </style>

效果,點擊按鈕,頁面還是個對象數據,因為是reactive類型數據,沒有isRef屬性,vue不會自動在模板添加.value, 所以我們需要手動在模板添加age.value

 

 

 

我們如何判斷數據到底是ref還是reactive?
  通過isRef / isReactive 方法
<template>
  <div>
    <p>{{age}}</p>
    <button @click="myFn">按鈕</button>
  </div>
</template>

<script>

  import {reactive} from 'vue';

export default {
  name: 'App',
  setup() {
    let age = reactive({value: 18});
    function myFn() {
       console.log(isRef(age)); //false
        console.log(isReactive(age));  //true
        age.value = 666;
    }
    return {age, myFn}
  }
}
</script>

<style>

</style>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM