欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue3中ref和reactive的使用場景詳解

 更新時間:2025年04月17日 17:24:35   作者:墮落年代  
這篇文章主要介紹了Vue3中ref和reactive的使用場景,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Vue3中ref和reactive的使用場景

一、核心區(qū)別

特性refreactive
數(shù)據(jù)類型基本類型 + 對象/數(shù)組(自動解包)僅對象/數(shù)組
響應(yīng)式原理通過 .value 觸發(fā)響應(yīng)直接代理對象
模板中使用自動解包(無需 .value)直接訪問屬性
解構(gòu)/傳遞保持響應(yīng)性需用 toRefs 保持響應(yīng)性

二、使用場景與案例

1. ref 的典型場景

(1) 管理基本類型值

import { ref } from 'vue'

// 計數(shù)器(數(shù)字)
const count = ref(0)
const increment = () => {
  count.value++ // 修改值必須用 .value
}

// 開關(guān)狀態(tài)(布爾值)
const isOpen = ref(false)
const toggle = () => {
  isOpen.value = !isOpen.value
}

(2) 引用 DOM 元素

<template>
  <input ref="inputRef" />
</template>

<script setup>
import { ref, onMounted } from 'vue'
const inputRef = ref(null)

onMounted(() => {
  inputRef.value.focus() // 訪問 DOM 元素
})
</script>

(3) 需要整體替換對象/數(shù)組

const user = ref({ name: 'Alice', age: 25 })
// 替換整個對象
user.value = { name: 'Bob', age: 30 }

const list = ref(['apple', 'banana'])
// 替換整個數(shù)組
list.value = ['orange', 'grape']

2. reactive 的典型場景

(1) 復(fù)雜表單對象

import { reactive } from 'vue'

const form = reactive({
  username: '',
  password: '',
  rememberMe: false
})

// 直接修改屬性(無需 .value)
form.username = 'John'

(2) 嵌套數(shù)據(jù)結(jié)構(gòu)

const nestedData = reactive({
  user: {
    profile: {
      name: 'Alice',
      address: {
        city: 'Shanghai'
      }
    }
  }
})

// 深層嵌套修改仍保持響應(yīng)性
nestedData.user.profile.address.city = 'Beijing'

(3) 數(shù)組操作

const items = reactive(['a', 'b', 'c'])

// 直接修改元素
items[0] = 'z' // 響應(yīng)式更新
items.push('d') // 使用數(shù)組方法

三、關(guān)鍵操作指南

1. 正確賦值/修改

ref 示例:

const count = ref(0)

// ? 正確修改
count.value = 10

// ? 錯誤!直接賦值會覆蓋 ref 對象
count = 10

reactive 示例:

const state = reactive({ count: 0 })

// ? 正確修改屬性
state.count = 10

// ? 錯誤!直接替換對象會失去響應(yīng)性
state = { count: 20 } 

// ? 保持響應(yīng)性的對象替換方式
Object.assign(state, { count: 20 })

2. 處理響應(yīng)式丟失

(1) 解構(gòu) reactive 對象

const state = reactive({ x: 1, y: 2 })

// ? 解構(gòu)后失去響應(yīng)性
const { x, y } = state 

// ? 使用 toRefs 保持響應(yīng)性
const { x, y } = toRefs(state)
x.value = 10 // 現(xiàn)在修改有效

(2) 函數(shù)間傳遞

// ? 傳遞整個 reactive 對象
const user = reactive({ name: 'Alice' })
updateUser(user)

function updateUser(userObj) {
  userObj.name = 'Bob' // 修改仍響應(yīng)
}

// ? 傳遞 ref 對象
const count = ref(0)
increment(count)

function increment(numRef) {
  numRef.value++
}

四、性能與最佳實踐

優(yōu)先選擇

  • 基本類型 → ref
  • 復(fù)雜對象 → reactive
  • 需要靈活替換 → ref(即使存儲對象)

注意事項

  • 避免在 reactive 中嵌套 ref(除非明確需要)
  • 對數(shù)組進(jìn)行索引操作時,建議使用變更方法(push/pop 等)
  • 大型數(shù)據(jù)集考慮 shallowRef/shallowReactive 提升性能

五、綜合對比案例

<script setup>
import { ref, reactive } from 'vue'

// ref 管理用戶ID(基本類型)
const userId = ref(123)

// reactive 管理用戶詳情(對象)
const userDetail = reactive({
  name: 'Alice',
  permissions: ['read', 'write']
})

// 修改操作示例
const updateUser = () => {
  // 修改 ref
  userId.value = 456
  
  // 修改 reactive 對象
  userDetail.name = 'Bob'
  userDetail.permissions.push('delete')
}

// 替換整個對象的最佳實踐
const resetUser = () => {
  // ref 可以直接替換
  userId.value = 0
  
  // reactive 應(yīng)該合并屬性而非直接賦值
  Object.assign(userDetail, {
    name: 'Guest',
    permissions: []
  })
}
</script>

通過以上案例可以看出:ref 更適合管理獨立值和需要完全替換的場景,而 reactive 在處理復(fù)雜對象結(jié)構(gòu)時更直觀。根據(jù)具體需求靈活選擇,可顯著提升代碼可維護(hù)性。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue使用webSocket更新實時天氣的方法

    vue使用webSocket更新實時天氣的方法

    本文將結(jié)合實例代碼,介紹vue使用webSocket更新實時天氣的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • vite構(gòu)建項目并支持微前端

    vite構(gòu)建項目并支持微前端

    本文主要介紹了vite構(gòu)建項目并支持微前端,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • vue 組件間的通信之子組件向父組件傳值的方式

    vue 組件間的通信之子組件向父組件傳值的方式

    這篇文章主要介紹了vue 組件間的通信之子組件向父組件傳值的方式總結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • vue中自定義右鍵菜單插件

    vue中自定義右鍵菜單插件

    這篇文章主要為大家詳細(xì)介紹了vue中自定義右鍵菜單插件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue 路由緩存 路由嵌套 路由守衛(wèi) 監(jiān)聽物理返回操作

    vue 路由緩存 路由嵌套 路由守衛(wèi) 監(jiān)聽物理返回操作

    這篇文章主要介紹了vue 路由緩存 路由嵌套 路由守衛(wèi) 監(jiān)聽物理返回操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • VUE寫一個簡單的表格實例

    VUE寫一個簡單的表格實例

    在本篇文章里小編給大家整理的是關(guān)于VUE中表格的寫法實例以及相關(guān)知識點內(nèi)容,需要的朋友們可以參考下。
    2019-08-08
  • Vue項目的表單校驗實戰(zhàn)指南

    Vue項目的表單校驗實戰(zhàn)指南

    這篇文章主要介紹了Vue項目表單校驗的相關(guān)資料,前端表單校驗?zāi)軠p少無效請求,保護(hù)后端接口,使用ElementPlus表單組件進(jìn)行校驗,需要準(zhǔn)備表單對象、規(guī)則對象并進(jìn)行雙向綁定,用戶名、密碼以及協(xié)議勾選等字段都需符合特定規(guī)則,需要的朋友可以參考下
    2024-10-10
  • vue實現(xiàn)集成騰訊TIM即時通訊

    vue實現(xiàn)集成騰訊TIM即時通訊

    最近在做商城類的項目,需要使用到客服系統(tǒng),用戶選擇的騰訊IM即時通信,所以本文主要介紹了vue實現(xiàn)集成騰訊TIM即時通訊,感興趣的可以了解一下
    2021-06-06
  • vue3第二次傳遞數(shù)據(jù)方法無法獲取到最新的值的解決方法

    vue3第二次傳遞數(shù)據(jù)方法無法獲取到最新的值的解決方法

    這篇文章主要介紹了vue3第二次傳遞數(shù)據(jù)方法無法獲取到最新的值,本文通過實例圖文相結(jié)合給大家詳細(xì)講解,感興趣的朋友一起看看吧
    2025-04-04
  • vue.js評論發(fā)布信息可插入QQ表情功能

    vue.js評論發(fā)布信息可插入QQ表情功能

    這篇文章主要為大家詳細(xì)介紹了vue.js評論發(fā)布信息可插入QQ表情功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論