狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

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

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


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

1.什么是reactive?

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

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

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

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

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

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

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

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

  • ref

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

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

在模板中的使用

  • ref

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

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

4. 何時(shí)使用 Reactive,何時(shí)使用 Ref?

使用 Reactive:

當(dāng)你需要?jiǎng)?chuàng)建一個(gè)包含多個(gè)屬性的狀態(tài)對(duì)象時(shí),例如在狀態(tài)機(jī)、表單數(shù)據(jù)等場(chǎng)景中,使用 reactive 更為合適。

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

使用 Ref:

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

當(dāng)你需要單獨(dú)處理某個(gè)變量,或?qū)⑵渥鳛?props 傳遞時(shí),使用 ref 更加直觀。

5.使用場(chǎng)景

ref的使用場(chǎng)景

當(dāng)需要存儲(chǔ)一個(gè)簡(jiǎn)單的基本數(shù)據(jù)類型的響應(yīng)式數(shù)據(jù)時(shí),如一個(gè)計(jì)數(shù)器的值、一個(gè)輸入框的文本長(zhǎng)度等,ref是很好的選擇。例如,在一個(gè)組件中跟蹤用戶點(diǎn)擊按鈕的次數(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的使用場(chǎng)景

當(dāng)需要管理一個(gè)復(fù)雜的狀態(tài)對(duì)象,特別是包含多個(gè)相關(guān)屬性的對(duì)象時(shí),reactive更合適。例如,管理一個(gè)表單的狀態(tài),包括多個(gè)輸入框的值、表單的提交狀態(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>

組合使用

  • 在實(shí)際應(yīng)用中,refreactive經(jīng)常會(huì)組合使用。例如,reactive對(duì)象的某個(gè)屬性可能是一個(gè)ref。這樣可以充分利用它們各自的優(yōu)勢(shì)來構(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 是實(shí)現(xiàn)響應(yīng)式編程的重要工具。通過理解這兩者之間的區(qū)別以及適用場(chǎng)景,可以更有效地進(jìn)行狀態(tài)管理和應(yīng)用開發(fā)。簡(jiǎn)單來說:

  • 使用 Reactive

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

     管理簡(jiǎn)單基本數(shù)據(jù)類型或單獨(dú)數(shù)據(jù)。

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