超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

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

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


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

1.什么是reactive?

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

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

2.什么是ref?
ref用于創(chuàng)建一個響應式的數(shù)據(jù)引用。它可以包裝基本數(shù)據(jù)類型(如numberstring、boolean等)和對象。當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)

?響應式轉換方式

  • ref

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

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

在模板中的使用

  • 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ù)結構是復雜的,使用 reactive 可以使代碼更簡潔明了。

使用 Ref:

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

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

5.使用場景

ref的使用場景

當需要存儲一個簡單的基本數(shù)據(jù)類型的響應式數(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的使用場景

當需要管理一個復雜的狀態(tài)對象,特別是包含多個相關屬性的對象時,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ù)到服務器      formData.submitted = true;    };    return { formData, submitForm };  }};</script>

組合使用

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

<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>

總結

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

  • 使用 Reactive

     處理復雜的對象結構及其屬性。
  • 使用 Ref

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

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