vue3中的toRaw API

文章目錄

    • 什么是toRaw API?
    • 為什么需要toRaw?
    • 如何使用toRaw?
    • 實際應用場景


在這里插入圖片描述

這兩天在寫項目的時候,發現了一個之前沒用過的api,于是上網查了一下,發現這個api還是挺常用,所以在這記錄一下

什么是toRaw API?

toRaw 是 Vue 3 中的新工具,用于獲取一個響應式對象的原始對象。Vue 3 中引入了響應式代理,這意味著我們通常處理的是被代理的對象,而不是原始對象。toRaw 提供了一種方式,可以繞過代理,直接訪問和操作原始數據。

為什么需要toRaw?

在某些情況下,直接操作原始對象比操作響應式代理更有效。以下是一些常見的場景:

  • 調試和日志記錄:在調試或記錄對象時,直接輸出代理對象可能會導致混淆,使用toRaw可以更清晰地看到原始數據。
  • 性能優化:有時我們需要跳過代理機制進行一些性能關鍵的操作,這時toRaw可以派上用場。
  • 庫和插件開發:如果你在開發Vue插件或庫,可能需要處理原始對象而不是響應式代理。

如何使用toRaw?

使用toRaw非常簡單。它是一個從vue包中導出的函數,接受一個響應式對象并返回其原始對象。以下是一個基本示例:

import { reactive, toRaw } from 'vue';const state = reactive({count: 0,nested: {message: 'Hello, Vue 3!'}
});// 獲取原始對象
const rawState = toRaw(state);console.log(rawState); // { count: 0, nested: { message: 'Hello, Vue 3!' } }// 修改原始對象不會觸發響應式更新
rawState.count = 1;
console.log(state.count); // 0// 修改響應式對象會正常工作
state.count = 2;
console.log(state.count); // 2
console.log(rawState.count); // 2

在這個示例中,我們首先創建了一個響應式對象state。然后,我們使用toRaw獲取了這個響應式對象的原始對象rawState。可以看到,對原始對象的修改不會觸發響應式更新,而對響應式對象的修改則會同步到原始對象。

實際應用場景

1、調試和日志記錄
在調試復雜的響應式對象時,直接查看代理對象可能會讓人困惑。使用toRaw可以更清晰地查看對象的實際結構。

import { reactive, toRaw } from 'vue';const state = reactive({user: {name: 'Alice',age: 25}
});
console.log(toRaw(state));

2、性能優化
在處理大量數據時,跳過響應式代理進行操作可以提高性能。例如,在大型列表的批量更新中,直接操作原始對象會更高效。

import { reactive, toRaw } from 'vue';const list = reactive([...Array(10000).keys()]);const rawList = toRaw(list);// 直接操作原始數組,提高性能
rawList.forEach((item, index) => {rawList[index] = item * 2;
});console.log(list[0]); // 0,因為沒有觸發響應式更新
console.log(rawList[0]); // 0,因為我們直接修改的是原始對象

3、庫和插件開發
在開發Vue插件或庫時,可能需要處理原始對象而不是代理對象。例如,在創建一個深拷貝函數時,使用toRaw可以避免循環引用和代理對象帶來的問題。

import { reactive, toRaw } from 'vue';function deepClone(obj) {if (obj === null || typeof obj !== 'object') {return obj;}const cloned = Array.isArray(obj) ? [] : {};for (const key in obj) {cloned[key] = deepClone(toRaw(obj[key]));}return cloned;
}const state = reactive({user: {name: 'Bob',age: 30}
});const clonedState = deepClone(state);
console.log(clonedState); // { user: { name: 'Bob', age: 30 } }

總的來說,toRaw 是 Vue 3 中一個非常有用的工具,它允許我們直接訪問和操作響應式對象的原始數據。在調試、性能優化以及庫和插件開發中,toRaw 都能發揮重要作用。通過本文的介紹,希望你對toRaw有了更深入的理解,并能在實際項目中靈活運用它。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18400.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18400.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18400.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Pytorch實用教程:多分類任務中使用的交叉熵損失函數nn.CrossEntropyLoss

nn.CrossEntropyLoss 在 PyTorch 中是處理多分類問題的常用損失函數,它是兩個函數 nn.LogSoftmax 和 nn.NLLLoss(Negative Log Likelihood Loss)的組合。使用這個損失函數可以直接從模型得到原始的輸出分數(logits),而不需要單獨對輸出進行 Softmax 處理。下面詳細介紹這…

【Postman接口測試】第二節.Postman界面功能介紹(上)

文章目錄 前言一、Postman前言介紹二、Postman界面導航說明三、使用Postman發送第一個請求四、Postman 基礎功能介紹 4.1 常見類型的接口請求 4.1.1 查詢參數的接口請求 4.1.2 表單類型的接口請求 4.1.3 上傳文件的表單請求 4.1.4 JSON 類…

HCIP-Datacom-ARST自選題庫__BGP/MPLS IP VPN簡答【3道題】

1.在BGP/MPLSIPVPN場景中,如果PE設備收到到達同一目的網絡的多條路由時,將按照定的順序選擇最優路由。請將以下內容按照比較順序進行排序。 2.在如圖所示的BGP/MPLSIP VPN網絡中,管理員準備通過Hub-Spoke組網實現H站點對VPM流量的集中管控&am…

C# 配置文件設置詳解

文章目錄 1. 配置文件在 C# 項目中的作用和重要性2. 不同類型的配置文件app.configconfig.exejson 3. 創建和修改配置文件文件位置添加內容修改內容保存和加載 4. 讀取和寫入配置文件app.config 文件讀取config.exe 文件寫入JSON 文件讀寫 5. 示例代碼演示6. 配置文件在安全性方…

【kubernetes】關于k8s集群的污點、容忍、驅逐以及k8s集群故障排查思路

目錄 一、污點(Taint) 1.1污點介紹 1.2污點的組成格式 1.3當前 taint effect 支持如下三個選項: 1.4污點的增刪改查 1.4.1驗證污點的作用——NoExecute 1.4.2驗證污點的作用——NoSchedule 1.4.3 驗證污點的作用——PreferNoSchedule 1.5污點的配置與管理…

防刷發送短信驗證碼接口的五種簡單好用方法絕對夠用

防刷發送短信驗證碼接口的五種簡單好用方法,絕對夠用 前端增加圖形驗證碼,點擊發送按鈕后增加60s倒計時,60s后才可以再次點擊 后端對接口次數校驗,60s內同一電話號碼只能發送一次 // 生成基于電話號碼的重試鎖定鍵 String repeat…

MATLAB增強型鯨魚優化改進算法代碼復現實例

MATLAB增強型鯨魚優化改進算法代碼復現實例 MATLAB增強型鯨魚優化改進算法代碼復現實例

php反序列化學習(1)

1、php面向對象基本概念 類的定義: 類是定義了一件事物的抽象特征,它將數據的形式以及這些數據上的操作封裝住在一起。(對象是具有類類型的變量,是對類的實例) 構成: 成員變量(屬性&#xf…

基于開源項目HAL STM32F4 +DSP庫跑SVPWM開環速度測試

HAL STM32F4 ARM DSP庫跑SVPWM開環速度測試 ?本篇硬件電路和代碼來源于此開源項目:https://github.com/MengYang-x/STM3F401-FOC/tree/main📍硬件電路和項目介紹,立創開源廣場:https://oshwhub.com/shadow27/tai-yang-neng-wu-re…

走進智慧倉儲:3D可視化工廠園區革新物流新紀元

在快節奏的現代生活中,物流倉儲行業扮演著至關重要的角色。隨著科技的飛速發展,傳統倉儲模式正面臨一場前所未有的變革。今天,就讓我們一起看看3D可視化技術如何為物流行業帶來前所未有的便利與效率。 什么是3D可視化工廠園區? 3…

2024華為OD機試真題-最長子字符串的長度(一)-C++-OD統一考試(C卷D卷)

題目描述 給你一個字符串 s,首尾相連成一個環形,請你在環中找出 o 字符出現了偶數次最長子字符串的長度。 輸入描述 輸入是一個小寫字母組成的字符串 輸出描述 輸出是一個整數 備注 1 ≤ s.length ≤ 500000 s 只包含小寫英文字母 用例1 輸入 alol…

vim常用指令——001

vim常用指令 Vim的命令模式常用操作一、定位移動光標二、行的基本操作【復制、粘貼、刪除】三、查找、替換四、分屏命令 總結給大家總結下四個運行模式: Vim的命令模式常用操作 一、定位移動光標 按h:將光標向左移動一個字符,等同于方向鍵左…

UI學習筆記(二)—— 深入了解導航控制

「OC」UI學習筆記&#xff08;二&#xff09; 文章目錄 「OC」UI學習筆記&#xff08;二&#xff09;手動布局子視圖自動布局子視圖導航控制器高級使用 手動布局子視圖 //父視圖的.h文件 #import <UIKit/UIKit.h> NS_ASSUME_NONNULL_BEGINinterface JCSuperView : UIVie…

【最新區塊鏈論文錄用資訊】CCF A—INFOCOM 2024 共17篇

Conference&#xff1a;IEEE International Conference on Computer Communications CCF level&#xff1a;CCF A Categories&#xff1a;計算機網絡 Year&#xff1a;2024 Num&#xff1a;17 A Generic Blockchain-based Steganography Framework with High Capacity via …

Python: 使用pyotp實現OTP一次性密碼驗證

使用pyotp實現OTP一次性密碼驗證 OTP的基本原理 生成一個共享秘鑰作為隨機數的種子服務端通過種子計算出當前的密碼客戶端也通過相同的種子計算出當前的密碼驗證客戶端生成的密碼和服務端生成的密碼是否匹配 服務端和客戶端計算的方式一樣 共享密鑰 時間因子 算法 > 密…

多個文本如何一鍵導出二維碼?在線批量生碼的制作方法

當存在多條文本數據并且需要將每條數據生成單獨的二維碼來使用&#xff0c;很多小伙伴可能還在用一個一個來制作的方法&#xff0c;在二維碼生成器上將文本轉二維碼。這種方式操作起來比較的繁瑣&#xff0c;需要浪費大量的時間&#xff0c;那么有什么方法可以簡化這個過程嗎&a…

【Android-Compose】ViewModel 的 init 初始化函數中使用非主線程上的協程閃退問題

問題&#xff1a; 在 Compose- kotlin 中&#xff0c;如果在 ViewModel 中的 init 函數中使用非主線程上的協程會導致閃退問題&#xff0c; 具體代碼為&#xff1a; HiltViewModel class ApkScreenViewModel Inject constructor(... ) : ViewModel() {// 1. 在非 主線程的協程…

#學習方法#筆記#微信

飛鳥寫作是一個非常好用、靠譜且方便的論文寫作工具&#xff0c;可以幫助用戶高效地完成論文寫作任務。無論是學生還是研究人員&#xff0c;使用飛鳥寫作都能極大地提升寫作效率和質量。 首先&#xff0c;飛鳥寫作具有強大的查重降重功能&#xff0c;能夠幫助用戶快速檢測論文…

【數據庫】數據庫學習(MySQL,Oracle,PostgreSql)

數據庫語句學習 摘要&#xff1a;文章主要內容是數據庫語句的基本操作&#xff0c;以及一些基本的數據庫標準庫函數 重點&#xff1a;SQL語句對大小寫不敏感 數據庫操作語句 SELECT - 從數據庫表中獲取數據UPDATE - 更新數據庫表中的數據DELETE - 從數據庫表中刪除數據INSERT …

OSPF的擴展配置

1、認證——直連的鄰居或鄰接關系間,進行認證配置后,5種數據包中均攜帶身份核實的密碼&#xff0c;且華為設備會對更新信息進行加密--前提為認證方式選擇密文認證 1)接口認證 [r1-GigabitEthernet0/0/1ospf authentication-mode md5 1 cipher 123456 直連的鄰居間秘鑰和編號、模…