Vue3中ref和toRef的區別


1. ref是復制,視圖會更新

如果利用ref將某一個對象中的某一個屬性值變成響應式數據
我們修改響應式數據是不會影響原始數據的;
同時視圖會跟新。
ref就是復制 復制是不會影響原始數據的
<template>
 <div>
    <div>
      <div>{{stateObj}}</div>
       <button @click="func1">按鈕</button>
    </div>
 </div>
</template>
<script>
import {ref} from 'vue'
export default {
  name: 'App',
  setup(){
    let obj={name:"張三",age:22}
    
    //將對象中的某一個屬性
    //變成響應式數據
    //而不是將對象變成響應式數據
    let stateObj=ref(obj.name)
    function func1(){
      stateObj.value="張三變成李四";
      //原始數據沒有發生改變 原始數據obj {name: "張三", age: 22}
      console.log("原始數據obj",obj)

      //響應式數據發生改變了  
      /**
      響應式stateObj RefImpl {
          _rawValue: "張三變成李四", _shallow: false,
          __v_isRef: true, _value: "張三變成李四"
      }
      **/
      //變成了一個ref的對象
      console.log("響應式stateObj",stateObj)

    }

    return {stateObj,func1}
},
}
</script>

2.toRef是引用,視圖不跟新

如果利用toRef將某一個對象中的屬性變成了響應式的數據
我們修改響應式的數據是會影響原始數據的
如果數據是通過toRef創建的,修改值后,數據不會觸發視圖

toRef是引用;它引用的是以前那個對象中的屬性
所以你修改后,會影響到原始數據終中的值
<template>
 <div>
    <div>
      <div>{{state}}</div>
       <button @click="func1">按鈕</button>
    </div>
 </div>
</template>
<script>
import {toRef} from 'vue'
export default {
  name: 'App',
  setup(){
    let obj={name:"張三",age:22}
    //將對象中的某一個屬性name變成響應式數據
    //而不是將對象變成響應式數據
    let state=toRef(obj, 'name');
    console.log('toRef',state)
    function func1(){
      state.value="我是李四";
      console.log('obj',obj)
      console.log('state',state)
    }
    return {state,func1}
  },
}
</script>

3.結論

ref復制, 修改響應式數據,不會影響以前的數據,界面會更改。
toRef引用, 修改響應式的數據,會影響以前的數據,界面不會更新。

toRef的使用場景
如果想讓響應式數據和原始數據關聯起來。
並且更新響應式數據后,不想視圖更新;那么就可以使用toRef


免責聲明!

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



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