精品秘无码一区二区三区老师-精品秘一区二三区免费雷安-精品蜜桃秘一区二区三区-精品蜜桃秘一区二区三区粉嫩-精品蜜桃一区二区三区-精品蜜臀国产aⅴ一区二区三区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

vue3中ref與reactive的區(qū)別


2025年1月24日 20:41 本文熱度 426
在 vue3 中的組合式 api 中,針對響應(yīng)式有了一些改變,其中響應(yīng)式 api 中,兩個比較重要的是 ref 和 reactive,但是對于這兩個區(qū)別以及使用場景,大多數(shù)初學(xué)者都比較迷惑,本文會詳細講述這兩個區(qū)別以及使用場景。

1.什么是reactive?

reactive用于創(chuàng)建一個響應(yīng)式的對象。它會遞歸地將對象的所有屬性轉(zhuǎn)換為響應(yīng)式的。這意味著如果對象內(nèi)部還有嵌套的對象或數(shù)組,它們也會變成響應(yīng)式的。

例如,創(chuàng)建一個reactive對象
const state = reactive({ count0message'Hello' })

2.什么是ref?
ref用于創(chuàng)建一個響應(yīng)式的數(shù)據(jù)引用。它可以包裝基本數(shù)據(jù)類型(如numberstringboolean等)和對象。當ref包裝的值被修改時,Vue 會自動更新與之綁定的 DOM。

例如,創(chuàng)建一個ref來存儲一個數(shù)字
const count = ref(0)

3.ref 和reactive 之間的區(qū)別?
數(shù)據(jù)類型支持
    • ref

      :可以包裝基本數(shù)據(jù)類型和對象。當訪問ref包裝的值時,需要通過.value屬性來獲取實際的值。例如
      console.log(count.value)
    • reactive

      :主要用于對象類型,對于基本數(shù)據(jù)類型,雖然也可以使用reactive(如reactive({ value: 1})),但不如ref方便。并且reactive對象的屬性可以直接訪問,不需要額外的語法,如
      console.log(state.count)

?響應(yīng)式轉(zhuǎn)換方式

  • ref

    :是通過Object.defineProperty()(在 Vue 3 中實際的實現(xiàn)更復(fù)雜,但基本原理類似)為.value屬性添加了getset訪問器來實現(xiàn)響應(yīng)式。
  • reactive

    :是基于Proxy對象來實現(xiàn)響應(yīng)式的。它可以攔截對象的各種操作(如屬性讀取、設(shè)置、刪除等),從而實現(xiàn)響應(yīng)式更新。這使得reactive在處理復(fù)雜的嵌套對象時更加高效和靈活。

在模板中的使用

  • ref

    :在模板中,ref包裝的值會自動解包。例如,如果count是一個ref,在模板中可以直接使用{{ count }},而不需要寫成{{ count.value }}
  • reactive

    :在模板中可以直接訪問reactive對象的屬性,如{{ state.count }}

4. 何時使用 Reactive,何時使用 Ref?

使用 Reactive:

當你需要創(chuàng)建一個包含多個屬性的狀態(tài)對象時,例如在狀態(tài)機、表單數(shù)據(jù)等場景中,使用 reactive 更為合適。

如果你的數(shù)據(jù)結(jié)構(gòu)是復(fù)雜的,使用 reactive 可以使代碼更簡潔明了。

使用 Ref:

如果你要管理簡單的數(shù)據(jù)類型(如數(shù)字、字符串等),則使用 ref 更為簡便和高效。

當你需要單獨處理某個變量,或?qū)⑵渥鳛?props 傳遞時,使用 ref 更加直觀。

5.使用場景

ref的使用場景

當需要存儲一個簡單的基本數(shù)據(jù)類型的響應(yīng)式數(shù)據(jù)時,如一個計數(shù)器的值、一個輸入框的文本長度等,ref是很好的選擇。例如,在一個組件中跟蹤用戶點擊按鈕的次數(shù):

<template>  <button @click="increment">Click me</button>  <p>You clicked {{ count }} times.</p></template><script>import { ref } from 'vue';export default {  setup() {    const count = ref(0);    const increment = () => {      count.value++;    };    return { count, increment };  }};</script>

reactive的使用場景

當需要管理一個復(fù)雜的狀態(tài)對象,特別是包含多個相關(guān)屬性的對象時,reactive更合適。例如,管理一個表單的狀態(tài),包括多個輸入框的值、表單的提交狀態(tài)等:
<template>  <form @submit.prevent="submitForm">    <input v-model="formData.name" type="text" placeholder="Name">    <input v-model="formData.email" type="email" placeholder="Email">    <button type="submit">Submit</button>  </form>  <p v-if="formData.submitted">Form submitted successfully!</p></template><script>import { reactive } from 'vue';export default {  setup() {    const formData = reactive({      name'',      email'',      submittedfalse    });    const submitForm = () => {      // 這里可以添加表單提交的邏輯,比如發(fā)送數(shù)據(jù)到服務(wù)器      formData.submitted = true;    };    return { formData, submitForm };  }};</script>

組合使用

  • 在實際應(yīng)用中,refreactive經(jīng)常會組合使用。例如,reactive對象的某個屬性可能是一個ref。這樣可以充分利用它們各自的優(yōu)勢來構(gòu)建復(fù)雜的響應(yīng)式應(yīng)用。

<template>  <div>    <p>{{ state.obj.count }}</p>    <button @click="incrementCount">Increment</button>  </div></template><script>import { ref, reactive } from 'vue';export default {  setup() {    const count = ref(0);    const state = reactive({      obj: { count }    });    const incrementCount = () => {      count.value++;    };    return { state, incrementCount };  }};</script>

總結(jié)

在 Vue 3 中,Reactive 和 Ref 是實現(xiàn)響應(yīng)式編程的重要工具。通過理解這兩者之間的區(qū)別以及適用場景,可以更有效地進行狀態(tài)管理和應(yīng)用開發(fā)。簡單來說:

  • 使用 Reactive

     處理復(fù)雜的對象結(jié)構(gòu)及其屬性。
  • 使用 Ref

     管理簡單基本數(shù)據(jù)類型或單獨數(shù)據(jù)。

該文章在 2025/1/25 10:28:30 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产人妻精品久久久久久 | 国产欧美精品一区二区三区 | 国产一区二区三区在线观看免费激情 | 国产精品成人99一区无码 | 国产毛片不卡一区二区三区 | 日本在线观看a | 国产精品美女久久久网站动漫 | 中文字幕无码日韩系列 | 精品欧美一区二区三区精品久久 | 日韩aⅴ精品一区二区三区 日韩aⅴ精品一区二区三 | 无码福利日韩神码福利片 | 99热久久爱五月天婷婷 | 久久久久久夜精品精品免费啦 | 精品人妻无码一区二区三区9 | 伊甸园精品99久久久久久 | 亚洲欧美在线观看 | 亚洲精品乱码8久久久久久日本 | 在线观看中文字幕一区 | 国产日韩精品中文字无码 | 亚洲精品久久99久久一二三区 | 国产免费内射又粗又爽密桃视频 | 国产福利在线观看 | 国产精品欧美一区麻豆系列 | 亚亚欧精品黄色视频在 | 国产在线精品国自产拍影院同性 | 日韩亚洲欧洲在线rrrr片 | 亚洲91av视频在线观看 | 一区二区三区动漫成人在线观看 | 亚洲精品乱码久久久久66 | 日韩国产精品不卡在线 | 国产对白精品刺激一区二区 | 亚洲免费视频日本一区二区 | JIZJIZJIZ 日本老师水多 | 免费99精品国产自在在线 | 蜜臀av色欲a片无码精品一区 | 亚洲综合成人网在线观看 | 欧美日产国产精品 | 91精品国产高清久久久久久g | 91精品国产综合久久久亚洲日韩 | 日韩欧美国产偷亚洲清高 | 中文天堂国产最新 |