Vue3之toRefs和toRef在reactive中的一些應用方式
回顧響應式對象
在介紹知識點之前,我們準備好初始代碼
<template>
<h2>姓名:{{ person.name }}</h2>
<h2>姓名:{{ person.age }}</h2>
<button @click="change_name">修改名字</button>
<button @click="change_age"></button>
</template>
<script lang="ts" setup name="Person11">
import {reactive} from 'vue'
let person = reactive({
name:'饅頭',
age:22
})
function change_name(){
person.name += '*'
}
function change_age(){
person.age += 1
}
</script>
<style scoped>
.person {
background-color: skyblue;
box-shadow: 0 0 10px;
border-radius: 10px;
padding: 20px;
}
button {
margin: 0 5px;
}
</style>
運行結果如下

是否和你想的一樣呢,我們使用了reactive進行創(chuàng)建響應式對象
接下來我們對person進行解構賦值
或許有些人不太理解解構賦值,我從網(wǎng)上找了一段話
- 解構賦值是 JavaScript 中一種方便的語法,用于從數(shù)組或對象中提取數(shù)據(jù)并賦值給變量。通過解構賦值,可以輕松地提取數(shù)組中的元素或對象中的屬性,使代碼更簡潔易讀。
- 它還可以嵌套使用,處理復雜的數(shù)據(jù)結構,但要注意避免過度解構,以保持代碼的可讀性。
接下來我們看看代碼中如何操作,只需在數(shù)據(jù)下面加一行
let {name,age} = person接下來我們修改方法中的部分代碼
//原代碼
function change_name(){
person.name += '*'
}
function change_age(){
person.age += 1
}
//修改之后的代碼
function change_name(){
name += '*'
}
function change_age(){
age += 1
}
這樣我們的頁面是否還會響應呢,答案是不可以

如果我們再修改模板里面的內容呢
<h2>姓名:{{ name }}</h2>
<h2>姓名:{{ age }}</h2>
答案也是不更新的,但是數(shù)據(jù)究竟改沒改呢,我們打印一下
function change_name(){
name += '*'
console.log(name)
}
function change_age(){
age += 1
console.log(age)
}
控制臺結果顯示如下,所以說是改了的

接下來我們解釋一下
let {name,age} = person上面這行代碼和下面兩行代碼其實是等價的
let name=person.name let age=person.age
同時我們要明確一點,下圖的數(shù)據(jù)是響應式的

但是我們解構后相當于自己重新定義了一個對象name和age,然后person.name和person.age是不變的
多說無益,我們測試一下叭
function change_name(){
name += '*'
console.log(name, person.name)
}

結果顯然了叭,結論就是:響應式對象解構出的并非是響應式對象
介紹toRefs
承接上個標題,我們如果想要將解構的對象變?yōu)轫憫降?,我們應該怎么做呢,只需要import一個toRefs
import {reactive,toRefs} from 'vue'同時我們再將解構的person包裹一下toRefs
let {name,age} = toRefs(person)這樣的意思就是,將解構的數(shù)據(jù)變?yōu)镽ef定義的響應式對象,將reactive對象變?yōu)镽ef對象
接下來我們改一下方法
function change_name(){
name.value += '*'
console.log(name, person.name)
}
function change_age(){
age.value += 1
console.log(age)
}
這樣我們再測試一下

介紹toRef(不常用)
toRef和toRefs是 Vue3 中用于處理響應式對象的兩個函數(shù),它們有一些重要的區(qū)別:
toRef:
- 參數(shù):接收一個響應式對象和一個屬性名,返回一個 ref 對象,指向該屬性的值。
- 用途:主要用于將單個屬性轉換為 ref 對象,使得該屬性的值能夠被響應式地跟蹤。
toRefs:
- 參數(shù):接收一個響應式對象,返回一個包含該對象所有屬性的 ref 對象。
- 用途:常用于在組件中將 props 轉換為響應式對象,或者在 setup 函數(shù)中處理響應式對象的多個屬性。
總的來說,toRef用于處理單個屬性,將其轉換為 ref 對象,而toRefs用于處理整個對象,將對象的所有屬性都轉換為 ref 對象
總結
本節(jié)介紹了一下toRefs和toRef,同時回憶了一下reactive
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
如何利用vue展示.docx文件、excel文件和csv文件內容
最近遇到了一些新的需求,需要前端實現(xiàn)文件預覽功能,下面這篇文章主要給大家介紹了關于如何利用vue展示.docx文件、excel文件和csv文件內容的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-04-04
在vue-cli腳手架中配置一個vue-router前端路由
這篇文章主要給大家介紹了在vue-cli腳手架中配置一個vue-router前端路由的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。2017-07-07
ant design vue中日期選擇框混合時間選擇器的用法說明
這篇文章主要介紹了ant design vue中日期選擇框混合時間選擇器的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
vue-cli3.0修改打包后的文件名和文件地址,打包后本地運行報錯解決
這篇文章主要介紹了vue-cli3.0修改打包后的文件名和文件地址,打包后本地運行報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04

