亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue3中關于ref和reactive的問題怎么解決

發布時間:2023-04-19 15:29:51 來源:億速云 閱讀:147 作者:iii 欄目:開發技術

這篇文章主要介紹“Vue3中關于ref和reactive的問題怎么解決”,在日常操作中,相信很多人在Vue3中關于ref和reactive的問題怎么解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Vue3中關于ref和reactive的問題怎么解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    關于ref和reactive的問題

    如果你使用過 Vue3,你知道的,在 Vue3 中有兩個非常常用的響應式 API:reactive 和 ref。它們會把我們想要追蹤的數據變成響應式。

    而且我們在使用時一直被告知 ref 用于創建基礎類型的響應式,也可以創建引用類型的響應式。而對于引用類型,底層也是轉換為 reactive 來進行響應式處理。那既然這樣為撒還需要 reactive ,全部使用 ref 不就行了嗎?

    雖然 ref 創建的響應式數據在腳本中需要通過 .value 才能訪問到呀!但是這里肯定影響不大。并且在模板中會自動添加上 .value,所以模板中不需要通過 .value 訪問。

    既然這二者基本沒撒差別,但是還是暴露了 reactive 這個 API,難道有什么場景是 reactive 能做而 ref 做不了的?

    簡單了解 ref & reactive

    我們先簡單了解一下這兩個 API。

    reactive

    返回對象的響應式副本,響應式轉換是“深層”的——它影響所有嵌套 property。我們一般這樣寫。

    const obj = reactive({ count: 0 })

    并且可以直接使用。

    const count = obj.count

    ref

    受一個內部值并返回一個響應式且可變的 ref 對象。ref 對象僅有一個 .value property,指向該內部值。我們一般是這樣寫。

    const data = ref(xxx)

    引用的時候,一般會通過data.value的方式引用。

    const dataValue = data.value

    通過跟蹤 Vue3 的源代碼可以證明,當我們調用 ref 方法來定義響應式數據時,當參數為對象類型時,其實里面用的是 reactive 方法。也就是說上面的 data.value ,事實上是 reactive 方法創造出來的。

    注意:

    reactive 能做的 ref 也能做,并且還是用 reactive 做的

    當 ref 的參數為對象時,用的就是 reactive 方法

    在 Vue3 中,如果是把對象類型的數據弄成響應式,reactive 和 ref 都可以,且ref 內部是通過r eactive 來支持的。也就是說,你 reactive 能做的,我 ref 也能做。

    簡單來說 ref 是在 reactive 上在進行了封裝進行了增強,所以在 Vue3 中 reactive 能做的,ref 也能做,reactive 不能做的,ref 也能做。

    個人理解ref是reactive的語法糖,如:ref(1) 就等價于 reactive({value: 1});

    平時項目ref一把梭,是可以的,問題也不大

    vue3 ref 和reactive的區別

    Ref

    ref數據響應式監聽。ref 函數傳入一個值作為參數,一般傳入基本數據類型,返回一個基于該值的響應式Ref對象,該對象中的值一旦被改變和訪問,都會被跟蹤到,就像我們改寫后的示例代碼一樣,通過修改 count.value 的值,可以觸發模板的重新渲染,顯示最新的值

    <template>
      
      <h2>{{name}}</h2>
      <h2>{{age}}</h2>
      <button @click="sayName">按鈕</button>
    </template>
    
    <script lang="ts">
    import {ref,computed} from 'vue' 
    
    export default {
      name: 'App',
      setup(){
        const name = ref('zhangsan')
        const birthYear = ref(2000)
        const now = ref(2020)
        const age = computed(()=>{
          return now.value - birthYear.value
        })
        const sayName = () =>{
          name.value = 'I am ' + name.value
        }
        return {
          name,
          sayName,
          age
        }
      }
    }
    </script>

    reactive

    reactive是用來定義更加復雜的數據類型,但是定義后里面的變量取出來就不在是響應式Ref對象數據了

    所以需要用toRefs函數轉化為響應式數據對象

    Vue3中關于ref和reactive的問題怎么解決

    將上面用ref寫的代碼轉化成reactive型的代碼

    <template>
      <!-- <img alt="Vue logo" src="./assets/logo.png"> -->
      <div>
        <h2>{{ name }}</h2>
        <h2>{{ age }}</h2>
        <button @click="sayName">按鈕</button>
      </div>
    </template>
    
    <script lang="ts">
    import { computed, reactive,toRefs } from "vue";
    
    interface DataProps {
      name: string;
      now: number;
      birthYear: number;
      age: number;
      sayName: () => void;
    }
    
    export default {
      name: "App",
      setup() {
       
    
        const data: DataProps = reactive({
          name: "zhangsan",
          birthYear: 2000,
          now: 2020,
          sayName: () => {
            console.log(1111);
            console.log(data.name);
            
            data.name = "I am " + data.name;
            console.log(data.name);
          },
          age: computed(() => {
            return data.now - data.birthYear;
          }),
        });
    
        const refData = toRefs(data)
        refData.age
        return {
          ...refData,
        };
      },
    };
    </script>
    
    <style>
    #app {
      font-family: Avenir, Helvetica, Arial, sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      text-align: center;
      color: #2c3e50;
      margin-top: 60px;
    }
    </style>

    到此,關于“Vue3中關于ref和reactive的問題怎么解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    应城市| 蓬安县| 沛县| 阳东县| 汉川市| 阿勒泰市| 鄂托克前旗| 郧西县| 东乌珠穆沁旗| 凌源市| 建水县| 张家口市| 从江县| 伊金霍洛旗| 昌都县| 泰兴市| 桃江县| 克拉玛依市| 长治县| 阳原县| 福州市| 苏尼特左旗| 湘潭市| 龙口市| 阿尔山市| 张家口市| 合阳县| 桂林市| 崇文区| 太保市| 博罗县| 平谷区| 抚州市| 尼勒克县| 嘉禾县| 曲阳县| 沐川县| 新源县| 鲁山县| 涪陵区| 馆陶县|