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

vue中ref()和reactive()區(qū)別小結(jié)

 更新時間:2025年07月03日 11:43:31   作者:翻滾吧鍵盤  
本文主要介紹了vue中ref()和reactive()區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

好的,這是 Vue 3 中 ref()reactive() 這兩個核心響應式 API 之間區(qū)別的詳細解釋。

簡單來說,它們是創(chuàng)建響應式數(shù)據(jù)的兩種方式,主要區(qū)別在于處理的數(shù)據(jù)類型訪問數(shù)據(jù)的方式。

核心區(qū)別速查表

特性ref()reactive()
適用類型? 任何類型 (字符串、數(shù)字、布爾、對象、數(shù)組等)? 僅限對象類型 (Object, Array, Map, Set)
訪問/修改在 JS 中必須通過 .value 屬性在 JS 中直接訪問,像普通對象一樣
模板中使用不需要 .value,Vue 會自動解包直接訪問,像普通對象一樣
重新賦值? 可以對整個 .value 重新賦值? 不能直接對整個變量重新賦值,會破壞響應性
底層原理通過一個包含 value 屬性的對象來實現(xiàn)包裝使用 ES6 的 Proxy 實現(xiàn)對整個對象的劫持

ref():更靈活的“盒子”

ref() 的設計初衷是為了處理原始數(shù)據(jù)類型(Primitive Types),如字符串、數(shù)字、布爾值。當然,它也可以用來包裝對象。

你可以把 ref() 想象成一個萬能的、響應式的“盒子”。無論你放什么進去,它都會把它裝進一個特殊的盒子里。要訪問或修改里面的東西,你需要打開這個盒子,也就是訪問它的 .value 屬性。

ref()的關鍵點:

  • 接受任何值:ref('some string'), ref(123), ref(true), ref({ name: '張三' }) 都可以。
  • JS 中必須用 .value:在 <script setup> 或 setup() 函數(shù)中,訪問和修改 ref 創(chuàng)建的變量時,必須通過 .value。
  • 模板中自動解包:在 <template> 中使用時,Vue 非常智能,會自動“打開盒子”,所以你不需要寫 .value。

ref()示例代碼:

<template>
  <div>
    <p>計數(shù): {{ count }}</p>
    <button @click="increment">增加</button>

    <p>用戶信息: {{ user.name }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue';

// 1. 用于原始類型
const count = ref(0);

// 2. 在 JS/TS 中,必須通過 .value 來訪問和修改
function increment() {
  count.value++;
}

// 3. 也可以用于對象,但同樣需要 .value
const user = ref({ name: '張三' });
console.log(user.value.name); // 輸出: 張三
</script>

reactive():對象的“代理”

reactive() 專門用于將對象類型(包括普通對象、數(shù)組、Map、Set)的數(shù)據(jù)轉(zhuǎn)換成響應式數(shù)據(jù)。

它不做任何包裝,而是直接返回一個原始對象的“代理” (Proxy)。你對這個代理對象的所有操作(讀取、修改、添加、刪除屬性)都會被 Vue 攔截,從而觸發(fā)視圖更新。

reactive()的關鍵點:

  • 只能用于對象:reactive({ ... }), reactive([ ... ]) 可以,但 reactive(123) 會報錯。
  • 直接訪問:使用起來和普通 JS 對象一模一樣,不需要 .value。
  • 不能重新賦值:這是一個非常重要的陷阱!你不能直接用一個新的對象替換整個 reactive 變量,否則會失去響應性,因為這切斷了原始代理對象的連接。

reactive()示例代碼:

<template>
  <div>
    <p>用戶信息: {{ state.user.name }} - {{ state.user.age }} 歲</p>
    <p>他的愛好: {{ state.hobbies.join('、') }}</p>
    <button @click="updateUser">更新用戶信息</button>
  </div>
</template>

<script setup>
import { reactive } from 'vue';

// 1. 只能用于對象或數(shù)組
const state = reactive({
  user: {
    name: '李四',
    age: 30
  },
  hobbies: ['編程', '音樂']
});

function updateUser() {
  // 2. 直接修改屬性,像普通對象一樣
  state.user.age++;
  state.hobbies.push('運動');

  // ? 錯誤做法:直接替換整個對象會導致響應性丟失!
  // state = { user: { name: '王五', age: 40 }, hobbies: [] }; 

  // ? 正確做法:逐個屬性賦值或使用 Object.assign
  // Object.assign(state, { user: { name: '王五', age: 40 }, hobbies: [] });
}
</script>

總結(jié)與使用建議

優(yōu)先使用 ref():

  • 當你需要處理原始數(shù)據(jù)類型(字符串、數(shù)字、布爾值)時,必須使用 ref()。
  • 當你不確定數(shù)據(jù)類型時,ref() 是更安全、更通用的選擇。
  • 社區(qū)中有一種流行的風格是“始終使用 ref()”,以保持代碼風格的一致性。因為 ref() 既能處理原始類型,也能處理對象。

在特定場景下使用 reactive():

  • 當你明確知道你需要一個復雜的、多層級的響應式對象或數(shù)組時,使用 reactive() 可以讓代碼更簡潔,因為你不需要到處寫 .value。例如,管理一個復雜的表單狀態(tài)。

一個簡單的記憶法則:

  • ref -> 凡事用它準沒錯,就是記得在 JS 里加 .value。
  • reactive -> 專為對象服務,用法自然,但小心別整個替換掉它。

到此這篇關于vue中ref()和reactive()區(qū)別小結(jié)的文章就介紹到這了,更多相關vue ref()和reactive()區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • vue懸浮表單復合組件開發(fā)詳解

    vue懸浮表單復合組件開發(fā)詳解

    這篇文章主要為大家詳細介紹了vue懸浮表單復合組件開發(fā),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 前端之vue3使用WebSocket的詳細步驟

    前端之vue3使用WebSocket的詳細步驟

    websocket實現(xiàn)的全雙工通信,真真太香了,下面這篇文章主要給大家介紹了關于前端之vue3使用WebSocket的詳細步驟,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • Vue開發(fā)實現(xiàn)滑動驗證組件

    Vue開發(fā)實現(xiàn)滑動驗證組件

    這篇文章主要為大家詳細介紹了如何利用Vue開發(fā)實現(xiàn)簡單的滑動驗證組件,并且適配移動和PC,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-07-07
  • Vue基礎語法知識梳理上篇

    Vue基礎語法知識梳理上篇

    這篇文章主要介紹了Vue基礎語法知識梳理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-12-12
  • vue實現(xiàn)打包添加二級目錄

    vue實現(xiàn)打包添加二級目錄

    這篇文章主要介紹了vue實現(xiàn)打包添加二級目錄方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Vue動態(tài)組件表格的實現(xiàn)代碼

    Vue動態(tài)組件表格的實現(xiàn)代碼

    這篇文章主要介紹了Vue動態(tài)組件表格的實現(xiàn)代碼,包括框架結(jié)構(gòu)組件,文中還給大家封裝了幾個組件,有按鈕組件、圖片組件、滑動開關,結(jié)合示例代碼給大家詳細講解,需要的朋友可以參考下
    2022-10-10
  • 在?Vue?中控制表單輸入方法詳解

    在?Vue?中控制表單輸入方法詳解

    這篇文章主要介紹了在?Vue?中控制表單輸入方法詳解的相關資料,需要的朋友可以參考下
    2023-04-04
  • Vue3中路由跳轉(zhuǎn)優(yōu)化技巧分享

    Vue3中路由跳轉(zhuǎn)優(yōu)化技巧分享

    這篇文章主要為大家詳細介紹了Vue3中路由跳轉(zhuǎn)的相關優(yōu)化技巧,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以跟隨小編一起學習一下
    2025-07-07
  • vue的axios請求改變content-type為form-data問題

    vue的axios請求改變content-type為form-data問題

    這篇文章主要介紹了vue的axios請求改變content-type為form-data問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue引入sass并配置全局變量的方法

    Vue引入sass并配置全局變量的方法

    這篇文章主要介紹了Vue引入sass并配置全局變量的方法
    2018-06-06

最新評論

大连市| 清水河县| 临高县| 康平县| 固始县| 南安市| 固始县| 上饶县| 塔河县| 洮南市| 孟连| 临洮县| 鄂托克前旗| 塔城市| 股票| 来宾市| 略阳县| 进贤县| 安乡县| 綦江县| 桃园县| 丘北县| 渭源县| 思南县| 高台县| 清镇市| 余干县| 漳州市| 棋牌| 兴义市| 贡嘎县| 贵溪市| 砀山县| 肇源县| 工布江达县| 永靖县| 吴川市| 八宿县| 保德县| 济南市| 甘肃省|