Vue3中ref和reactive的區(qū)別及說(shuō)明
Vue3 ref和reactive的區(qū)別
在 Vue 3 中,ref 和 reactive 都是用來(lái)創(chuàng)建響應(yīng)式數(shù)據(jù)的方法
但它們有以下主要區(qū)別:
1. 使用場(chǎng)景不同
ref:
- 主要用于基本數(shù)據(jù)類型(String、Number、Boolean 等)
- 也可以用于對(duì)象/數(shù)組,但需要通過(guò)
.value訪問 - 適合單個(gè)響應(yīng)式數(shù)據(jù)的管理
import { ref } from 'vue'
// 基本類型
const count = ref(0)
console.log(count.value) // 0
// 對(duì)象類型
const user = ref({
name: 'Tom',
age: 18
})
console.log(user.value.name) // 'Tom'reactive:
- 主要用于對(duì)象類型(Object、Array)
- 直接訪問屬性,不需要
.value - 適合多個(gè)響應(yīng)式數(shù)據(jù)的管理
import { reactive } from 'vue'
const state = reactive({
name: 'Tom',
age: 18,
hobbies: ['reading', 'swimming']
})
console.log(state.name) // 'Tom'2. 訪問方式不同
ref:
- 在 setup 中需要通過(guò)
.value訪問 - 在模板中自動(dòng)解包,直接使用
<script setup>
import { ref } from 'vue'
const count = ref(0)
// setup 中需要 .value
const increment = () => {
count.value++
}
</script>
<template>
<!-- 模板中直接使用,不需要 .value -->
<div>{{ count }}</div>
</template>reactive:
- 直接訪問屬性,不需要
.value - 在模板和 setup 中的訪問方式相同
<script setup>
import { reactive } from 'vue'
const state = reactive({
count: 0
})
// 直接訪問
const increment = () => {
state.count++
}
</script>
<template>
<!-- 直接訪問 -->
<div>{{ state.count }}</div>
</template>3. 解構(gòu)行為不同
ref:
- 支持解構(gòu),解構(gòu)后仍然保持響應(yīng)性
- 可以使用
toRefs將 reactive 對(duì)象的屬性轉(zhuǎn)換為 ref
import { ref, toRefs } from 'vue'
const user = reactive({
name: ref('Tom'),
age: ref(18)
})
// ref 解構(gòu)后保持響應(yīng)性
const { name, age } = toRefs(user)
name.value = 'Jerry' // 仍然是響應(yīng)式的reactive:
- 解構(gòu)后會(huì)失去響應(yīng)性
- 需要使用
toRefs保持響應(yīng)性
import { reactive } from 'vue'
const state = reactive({
name: 'Tom',
age: 18
})
// 直接解構(gòu)會(huì)失去響應(yīng)性
const { name, age } = state
name = 'Jerry' // 不再是響應(yīng)式的
// 使用 toRefs 保持響應(yīng)性
const { name, age } = toRefs(state)
name.value = 'Jerry' // 仍然是響應(yīng)式的4. 使用建議
- 使用 ref 的場(chǎng)景:
- 基本數(shù)據(jù)類型的響應(yīng)式
- 需要解構(gòu)的響應(yīng)式數(shù)據(jù)
- 單個(gè)響應(yīng)式數(shù)據(jù)的管理
const count = ref(0)
const message = ref('hello')
const isVisible = ref(true)- 使用 reactive 的場(chǎng)景:
- 復(fù)雜對(duì)象的響應(yīng)式
- 多個(gè)相關(guān)數(shù)據(jù)的組合
- 不需要解構(gòu)的數(shù)據(jù)管理
const state = reactive({
user: {
name: 'Tom',
age: 18
},
settings: {
theme: 'dark',
notifications: true
}
})- 混合使用:
- 可以在 reactive 對(duì)象中使用 ref
- 使用
toRefs轉(zhuǎn)換 reactive 對(duì)象為 ref
const state = reactive({
count: ref(0),
user: {
name: ref('Tom'),
age: ref(18)
}
})
// 轉(zhuǎn)換為 ref
const { count, user } = toRefs(state)通過(guò)理解這些區(qū)別,你可以根據(jù)具體場(chǎng)景選擇合適的響應(yīng)式方案,使代碼更加清晰和易于維護(hù)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Vue3.0中Ref與Reactive的區(qū)別示例詳析
- vue3?中ref和reactive的區(qū)別講解
- 前端vue3中的ref與reactive用法及區(qū)別總結(jié)
- Vue3 的ref和reactive的用法和區(qū)別示例解析
- Vue3中ref和reactive的基本使用及區(qū)別詳析
- vue3.0中ref與reactive的區(qū)別及使用場(chǎng)景分析
- Vue3中關(guān)于ref和reactive的區(qū)別分析
- vue3中reactive和ref的實(shí)現(xiàn)與區(qū)別詳解
- vue3 ref 和reactive的區(qū)別詳解
- vue3中ref和reactive的區(qū)別舉例詳解
相關(guān)文章
vscode+vue cli3.0創(chuàng)建項(xiàng)目配置Prettier+eslint方式
這篇文章主要介紹了vscode+vue cli3.0創(chuàng)建項(xiàng)目配置Prettier+eslint方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
使用Vue3和p5.js實(shí)現(xiàn)交互式圖像動(dòng)畫
這篇文章主要介紹了如何用Vue3和p5.js打造一個(gè)交互式圖像動(dòng)畫,文中給出了詳細(xì)的代碼示例,本代碼適用于需要在網(wǎng)頁(yè)中實(shí)現(xiàn)圖像滑動(dòng)效果的場(chǎng)景,例如圖片瀏覽、相冊(cè)展示等,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-06-06
vue實(shí)現(xiàn)局部刷新的實(shí)現(xiàn)示例
這篇文章主要介紹了vue實(shí)現(xiàn)局部刷新的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
vue computed無(wú)法得到this的屬性或方法的解決
這篇文章主要介紹了vue computed無(wú)法得到this的屬性或方法的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
vue3?+?element-plus?的?upload?+?axios?+?django?實(shí)現(xiàn)文件上
這篇文章主要介紹了vue3?+?element-plus?的?upload?+?axios?+?django?文件上傳并保存,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01

