這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1. ref的使用 ref 接受一個原始值,返回一個具有響應式的對象,對象有一個value屬性,其值就是所傳遞的原始值。 ref是做的一個拷貝關係,修改對象msg的值,不會影響對象obj,視圖會發生變化。 import { ref } f ...
這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助
1. ref的使用
ref 接受一個原始值,返回一個具有響應式的對象,對象有一個value屬性,其值就是所傳遞的原始值。
ref是做的一個拷貝關係,修改對象msg的值,不會影響對象obj,視圖會發生變化。
import { ref } from "vue"; let obj = { name: "你好", age: 16 }; let msg = ref(obj.name); console.log(msg.value); // 你好 let arr = ref([]) // ref 可以是任何類型 也可以是對象 function change1() { msg.value = "世界"; //修改msg1數據的時候必須要加 .value 渲染數據的時候就不用加了 console.log(obj, msg.value); // {name: "你好", age: 16} '世界' // 數據此時沒改變 但是頁面的數據改變了 } change1(); return { obj, msg, };
如果給dom上加ref 就是當前的dom元素
<template> <div class="home-new"> <div ref="target"> </div> </div> </template> import {ref} from 'vue' export default { name: "HomeNew", setup(p, { emit }) { const target = ref(null); // 懶載入 console.log(target); return { target, }; }, };
2. toRef的使用
toRef用來給抽離響應式對象中的某一個屬性,並把該屬性包裹成ref對象,使其和原對象產生鏈接
toRef是做的一種引用關係,修改msg2的值,會影響對象msg,但視圖不會發生變化
setup(){ let msg = { name: 'zs', age: 16 } let msg2 = toRef(msg, 'name') console.log(msg2.value) // zs function change2() { msg2.value = 'ww' console.log(msg, msg2.value) // {name: "ww", age: 16} ww //此時 msg.ww 數據變了 但是視圖上的是不會變的 } change2() return { msg2,change2 } }
3. toRefs的使用
toRefs用來把響應式對象轉換成普通對象,把對象中的每一個屬性,包裹成ref對象
toRefs就是toRef的升級版,只是toRefs是把響應式對象進行轉換,其餘的特性和toRef無二
setup(){ let msg = { name: 'zs', age: 16 } let msg3 = toRefs(msg) console.log(msg) // { name:ref, age:ref } ref代指ref對象 function change3() { msg3.name.value = 'zl' msg3.age.value = 20 console.log(msg, msg3) // {name: "zl", age: 20} { name:ref, age:ref } } change3() return { msg3, change3 } }
請求過來的數據封裝了一下
<script> import { reactive, toRefs } from "vue"; import { getBanner } from "@/api"; export default { setup() { return { ...toRefs(getBan()), }; }, }; function getBan() { let bannerList = reactive({ list: [],// 模板中直接 寫入 list 就可以了 }); getBanner().then((res) => { bannerList.list = res.data; console.log(bannerList.list); }); return bannerList; } </script>
這樣寫模板中直接寫入 {{ list }} 就可以了 , 不用 {{ obj.list }},修改數據的時候還是 obj.list = 'aaa'
import { reactive, toRefs } from "vue"; setup() { let obj = reactive({ list: [], newS: [], moods: [], }); return { ...toRefs(obj) }; },
4.總結
ref、toRef、toRefs 都可以將某個對象中的屬性變成響應式數據
ref的本質是拷貝,修改響應式數據,不會影響到原始數據,視圖會更新
toRef、toRefs的本質是引用,修改響應式數據,會影響到原始數據,視圖不會更新
toRef 一次僅能設置一個數據,接收兩個參數,第一個參數是哪個對象,第二個參數是對象的哪個屬性
toRefs接收一個對象作為參數,它會遍歷對象身上的所有屬性,然後挨個調用toRef執行