最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3中ref和reactive的區(qū)別及說明

 更新時(shí)間:2024年11月06日 09:06:59   作者:合格的程序員  
在Vue3中,ref主要用于基本數(shù)據(jù)類型和單個(gè)數(shù)據(jù)管理,需要用.value訪問,reactive適用于對象和多數(shù)據(jù)管理,直接訪問屬性,ref支持解構(gòu)保持響應(yīng)性,reactive解構(gòu)后失去響應(yīng)性,選擇合適的方法可以使代碼更優(yōu)化

Vue3 ref和reactive的區(qū)別

在 Vue 3 中,refreactive 都是用來創(chuàng)建響應(yīng)式數(shù)據(jù)的方法

但它們有以下主要區(qū)別:

1. 使用場景不同

ref:

  • 主要用于基本數(shù)據(jù)類型(String、Number、Boolean 等)
  • 也可以用于對象/數(shù)組,但需要通過 .value 訪問
  • 適合單個(gè)響應(yīng)式數(shù)據(jù)的管理
import { ref } from 'vue'

// 基本類型
const count = ref(0)
console.log(count.value) // 0

// 對象類型
const user = ref({
  name: 'Tom',
  age: 18
})
console.log(user.value.name) // 'Tom'

reactive:

  • 主要用于對象類型(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 中需要通過 .value 訪問
  • 在模板中自動解包,直接使用
<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 對象的屬性轉(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)后會失去響應(yīng)性
  • 需要使用 toRefs 保持響應(yīng)性
import { reactive } from 'vue'

const state = reactive({
  name: 'Tom',
  age: 18
})

// 直接解構(gòu)會失去響應(yīng)性
const { name, age } = state
name = 'Jerry' // 不再是響應(yīng)式的

// 使用 toRefs 保持響應(yīng)性
const { name, age } = toRefs(state)
name.value = 'Jerry' // 仍然是響應(yīng)式的

4. 使用建議

  1. 使用 ref 的場景:
    • 基本數(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)
  1. 使用 reactive 的場景:
    • 復(fù)雜對象的響應(yīng)式
    • 多個(gè)相關(guān)數(shù)據(jù)的組合
    • 不需要解構(gòu)的數(shù)據(jù)管理
const state = reactive({
  user: {
    name: 'Tom',
    age: 18
  },
  settings: {
    theme: 'dark',
    notifications: true
  }
})
  1. 混合使用:
    • 可以在 reactive 對象中使用 ref
    • 使用 toRefs 轉(zhuǎn)換 reactive 對象為 ref
const state = reactive({
  count: ref(0),
  user: {
    name: ref('Tom'),
    age: ref(18)
  }
})

// 轉(zhuǎn)換為 ref
const { count, user } = toRefs(state)

通過理解這些區(qū)別,你可以根據(jù)具體場景選擇合適的響應(yīng)式方案,使代碼更加清晰和易于維護(hù)。

總結(jié)

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

相關(guān)文章

  • vue.js做一個(gè)簡單的編輯菜譜功能

    vue.js做一個(gè)簡單的編輯菜譜功能

    本文通過實(shí)例代碼給大家一個(gè)簡單的基于vue.js實(shí)現(xiàn)的編輯菜譜功能,代碼簡答易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05
  • Antd中單個(gè)DatePicker限定時(shí)間輸入范圍操作

    Antd中單個(gè)DatePicker限定時(shí)間輸入范圍操作

    這篇文章主要介紹了Antd中單個(gè)DatePicker限定時(shí)間輸入范圍操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue自定義switch開關(guān)組件,實(shí)現(xiàn)樣式可自行更改

    vue自定義switch開關(guān)組件,實(shí)現(xiàn)樣式可自行更改

    今天小編就為大家分享一篇vue自定義switch開關(guān)組件,實(shí)現(xiàn)樣式可自行更改,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue下axios攔截器token刷新機(jī)制的實(shí)例代碼

    vue下axios攔截器token刷新機(jī)制的實(shí)例代碼

    這篇文章主要介紹了vue下axios攔截器token刷新機(jī)制的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • vuex存值與取值的實(shí)例

    vuex存值與取值的實(shí)例

    今天小編大家分享一篇vuex存值與取值的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • vue中使用Cesium加載shp文件、wms服務(wù)、WMTS服務(wù)問題

    vue中使用Cesium加載shp文件、wms服務(wù)、WMTS服務(wù)問題

    這篇文章主要介紹了vue中使用Cesium加載shp文件、wms服務(wù)、WMTS服務(wù)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue中實(shí)現(xiàn)千位分隔符的示例代碼

    vue中實(shí)現(xiàn)千位分隔符的示例代碼

    本文主要介紹了vue中實(shí)現(xiàn)千位分隔符的示例代碼,主要兩種方法,一種是某一個(gè)字段轉(zhuǎn)換,一種是表格table中的整列字段轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • ElementUI中el-table表格組件如何自定義表頭

    ElementUI中el-table表格組件如何自定義表頭

    最近需要做一個(gè)el-table的表格,表頭需要顯示提示信息,本文主要介紹了ElementUI中el-table表格組件如何自定義表頭,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • ssm+vue前后端分離框架整合實(shí)現(xiàn)(附源碼)

    ssm+vue前后端分離框架整合實(shí)現(xiàn)(附源碼)

    這篇文章主要介紹了ssm+vue前后端分離框架整合實(shí)現(xiàn)(附源碼),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Vue的樣式綁定詳解

    Vue的樣式綁定詳解

    這篇文章主要為大家詳細(xì)介紹了Vue的樣式綁定,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評論

蒙自县| 东乡县| 舟山市| 勃利县| 夏河县| 泗洪县| 巴林左旗| 临朐县| 江源县| 牙克石市| 阿拉善左旗| 醴陵市| 浮梁县| 新乐市| 祁东县| 兰州市| 鹰潭市| 康乐县| 鄂尔多斯市| 麻阳| 蓬安县| 望城县| 银川市| 台安县| 阳信县| 惠东县| 秭归县| 信宜市| 德昌县| 普兰县| 乐亭县| 榆林市| 如东县| 元氏县| 河西区| 辽阳市| 伽师县| 措美县| 小金县| 秦安县| 和平县|