欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue 3 中 toRaw 的用法詳細(xì)講解

 更新時(shí)間:2024年11月21日 11:27:58   作者:代碼里的小貓咪  
`toRaw` 是 Vue3 提供的一個(gè) API,用于獲取響應(yīng)式對(duì)象的原始非響應(yīng)式對(duì)象,主要用于調(diào)試、與第三方庫(kù)兼容以及避免無(wú)限遞歸更新等場(chǎng)景,使用時(shí)需要注意不要濫用,以免破壞響應(yīng)式系統(tǒng),感興趣的朋友跟隨小編一起看看吧

toRaw 是 Vue 3 提供的一個(gè)  API,主要用于從 Vue 的響應(yīng)式對(duì)象中獲取其對(duì)應(yīng)的原始非響應(yīng)式對(duì)象。

1. toRaw 的作用

1、獲取原始對(duì)象

當(dāng)對(duì)象被 Vue 的響應(yīng)式系統(tǒng)包裹時(shí),直接訪問(wèn)它會(huì)返回一個(gè) Proxy 對(duì)象。如果需要訪問(wèn)未被響應(yīng)式系統(tǒng)代理的原始對(duì)象,可以使用 toRaw。

2、調(diào)試輔助

在調(diào)試時(shí),如果響應(yīng)式對(duì)象出現(xiàn)了意料之外的行為,toRaw 可以幫助我們查看原始數(shù)據(jù)。

3、與第三方庫(kù)兼容

某些第三方庫(kù)不支持 Vue 的響應(yīng)式對(duì)象(Proxy 對(duì)象),這時(shí)可以通過(guò) toRaw 將響應(yīng)式對(duì)象轉(zhuǎn)為普通對(duì)象傳遞給它們。

2. toRaw 的用法

2.1 基本語(yǔ)法

import { reactive, toRaw } from 'vue';
const reactiveObj = reactive({ foo: 'bar' });
const rawObj = toRaw(reactiveObj);
console.log(reactiveObj); // Proxy {foo: "bar"}
console.log(rawObj); // {foo: "bar"}

2.2 使用場(chǎng)景

1、獲取原始對(duì)象進(jìn)行對(duì)比或操作

響應(yīng)式對(duì)象中的 Proxy 包裹可能會(huì)導(dǎo)致意外行為,比如在比較對(duì)象時(shí)。

import { reactive, toRaw } from 'vue';
const reactiveObj = reactive({ a: 1 });
const rawObj = toRaw(reactiveObj);
// 比較原始對(duì)象
console.log(rawObj === reactiveObj); // false
console.log(rawObj == { a: 1 }); // false
// 使用原始對(duì)象
const anotherObj = { ...rawObj }; // 拷貝原始對(duì)象
console.log(anotherObj); // { a: 1 }

2、Debug 或日志記錄

為了避免調(diào)試時(shí)輸出 Proxy 對(duì)象,可以用 toRaw 獲取原始數(shù)據(jù)。

import { reactive, toRaw } from 'vue';
const state = reactive({ count: 0 });
function logState() {
  console.log('State:', toRaw(state));
}
state.count++;
logState(); // 輸出:State: { count: 1 }

3、防止無(wú)限遞歸更新

在某些情況下(如遞歸處理響應(yīng)式對(duì)象),直接操作響應(yīng)式數(shù)據(jù)可能會(huì)導(dǎo)致不必要的額外開銷或無(wú)限遞歸,使用 toRaw 可以避免這些問(wèn)題。

import { reactive, toRaw } from 'vue';
const data = reactive({ nested: { value: 1 } });
function process(obj) {
  const raw = toRaw(obj); // 獲取原始對(duì)象
  console.log(raw); // { value: 1 }
}
process(data.nested);

3. 注意事項(xiàng)

1、toRaw 不會(huì)脫離響應(yīng)式系統(tǒng)

使用 toRaw 獲取原始對(duì)象后,對(duì)原始對(duì)象的修改不會(huì)觸發(fā) Vue 的響應(yīng)式更新,但對(duì)原始對(duì)象的修改仍會(huì)觸發(fā)更新。

??

<template>
  <div>obj.foo: {{ obj.foo }}</div>
</template>
<script setup>
import { reactive, toRaw } from 'vue'
const obj = reactive({ foo: '更新前數(shù)據(jù) hello' })
const raw = toRaw(obj)
setTimeout(() => {
  raw.foo = '更新后數(shù)據(jù) hi'
  console.log('obj.foo', obj.foo) // "更新后數(shù)據(jù) hi"(原始對(duì)象和響應(yīng)式對(duì)象指向同一內(nèi)存地址)
})
</script>

2、 不要濫用 toRaw 

-  toRaw 應(yīng)用于特定場(chǎng)景,如與第三方庫(kù)交互或調(diào)試時(shí)。一般情況下,應(yīng)盡量使用響應(yīng)式數(shù)據(jù)。

- 濫用 toRaw 可能破壞 Vue 的響應(yīng)式系統(tǒng),導(dǎo)致不可預(yù)測(cè)的行為。

3、原始對(duì)象不能被 reactive 再次代理

如果對(duì)原始對(duì)象應(yīng)用 reactive,Vue 會(huì)返回其原始的響應(yīng)式對(duì)象,而不是重新代理它。

??

import { reactive, toRaw } from 'vue'
const obj = reactive({ foo: 'bar' })
const raw = toRaw(obj)
const newReactive = reactive(raw)
console.log(newReactive === obj) // true

4、只對(duì)響應(yīng)式對(duì)象有效

如果傳入的不是響應(yīng)式對(duì)象,toRaw 會(huì)直接返回原對(duì)象。

import { toRaw } from 'vue'
const plainObj = { foo: 'bar' }
console.log(toRaw(plainObj) === plainObj) // true

完整示例 ??

import { defineComponent, reactive, toRaw } from 'vue';
export default defineComponent({
  setup() {
    const state = reactive({
      items: [
        { id: 1, name: 'Vue' },
        { id: 2, name: 'React' },
      ],
    });
    const addRawItem = () => {
      const raw = toRaw(state.items); // 獲取原始數(shù)組
      raw.push({ id: raw.length + 1, name: 'Angular' });
      console.log('raw', raw);
    };
    return () => (
      <div>
        <h1>技術(shù)棧</h1>
        <ul>
          {state.items.map((item) => (<li key={item.id}>{item.name}</li>))}
        </ul>
        <button onClick={addRawItem}>添加項(xiàng)</button>
      </div>
    );
  },
});

展示為:

使用建議:

1、優(yōu)先使用 Vue 的響應(yīng)式系統(tǒng),toRaw 只在特殊場(chǎng)景中使用。

2、??:注意原始對(duì)象的修改不會(huì)觸發(fā)視圖更新。

3、避免過(guò)度依賴 toRaw,以免破壞響應(yīng)式的優(yōu)勢(shì)。

到此這篇關(guān)于Vue 3 中 toRaw 的詳細(xì)講解的文章就介紹到這了,更多相關(guān)Vue 3 toRaw 的詳細(xì)講解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在vue中使用export?default導(dǎo)出的class類方式

    在vue中使用export?default導(dǎo)出的class類方式

    這篇文章主要介紹了在vue中使用export?default導(dǎo)出的class類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Vue使用JsonView進(jìn)行JSON數(shù)據(jù)展示

    Vue使用JsonView進(jìn)行JSON數(shù)據(jù)展示

    Vue-JSON-Viewer 是一個(gè)用于在Vue項(xiàng)目中展示JSON數(shù)據(jù)的組件,它解決了在項(xiàng)目開發(fā)中面臨的展示JSON數(shù)據(jù)的需求,下面就跟隨小編一起來(lái)了解下它的具體使用吧
    2025-03-03
  • 解決vue-loader加載不上的問(wèn)題

    解決vue-loader加載不上的問(wèn)題

    這篇文章主要介紹了解決vue-loader加載不上的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • vue實(shí)現(xiàn)多組關(guān)鍵詞對(duì)應(yīng)高亮顯示功能

    vue實(shí)現(xiàn)多組關(guān)鍵詞對(duì)應(yīng)高亮顯示功能

    最近小編遇到這樣的問(wèn)題,多組關(guān)鍵詞,這里實(shí)現(xiàn)了關(guān)鍵詞的背景色與匹配值的字體顏色值相同,下面通過(guò)定義關(guān)鍵詞匹配改變字體顏色,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2019-07-07
  • vue3實(shí)現(xiàn)多層級(jí)列表的項(xiàng)目實(shí)踐

    vue3實(shí)現(xiàn)多層級(jí)列表的項(xiàng)目實(shí)踐

    本文主要介紹了vue3實(shí)現(xiàn)多層級(jí)列表的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • vue 的keep-alive緩存功能的實(shí)現(xiàn)

    vue 的keep-alive緩存功能的實(shí)現(xiàn)

    本篇文章主要介紹了vue 的keep-alive緩存功能的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 編寫v-for循環(huán)的技巧匯總

    編寫v-for循環(huán)的技巧匯總

    這篇文章主要介紹了編寫更好的v-for循環(huán)的6種技巧,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • Vue動(dòng)態(tài)添加屬性到data的實(shí)現(xiàn)

    Vue動(dòng)態(tài)添加屬性到data的實(shí)現(xiàn)

    在vue中請(qǐng)求接口中,一個(gè)請(qǐng)求方法可能對(duì)應(yīng)后臺(tái)兩個(gè)請(qǐng)求接口,所以請(qǐng)求參數(shù)就會(huì)有所不同。需要我們先設(shè)置共同的參數(shù),然后根據(jù)條件動(dòng)態(tài)添加參數(shù)屬性
    2022-08-08
  • Elementui?el-input輸入框校驗(yàn)及表單校驗(yàn)實(shí)例代碼

    Elementui?el-input輸入框校驗(yàn)及表單校驗(yàn)實(shí)例代碼

    輸入框是使用非常多的元素,用來(lái)輸入用戶名、密碼等等信息,Element提供了功能和樣式豐富的輸入框,下面這篇文章主要給大家介紹了關(guān)于Elementui?el-input輸入框校驗(yàn)及表單校驗(yàn)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • vuex提交state&&實(shí)時(shí)監(jiān)聽state數(shù)據(jù)的改變方法

    vuex提交state&&實(shí)時(shí)監(jiān)聽state數(shù)據(jù)的改變方法

    今天小編就為大家分享一篇vuex提交state&&實(shí)時(shí)監(jiān)聽state數(shù)據(jù)的改變方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論