前端基礎之《Vue(28)—Vue3 ref相關API》

ref相關API介紹

1、ref()

(1)ref介紹
ref用于定義基本數據類型,比如:string / boolean / number等(因為這幾個沒辦法代理)。
ref的背后是使用reactive來實現的響應式。
使用.value來訪問變量的值。

(2)打印一個ref對象

RefImpl引用實現,就是個響應式變量
因為Vue3給基本數據類型外面包了一層(做了Proxy()代理,加get、set鉤子),你傳了1000進來,得到的是對象
num = {
value: 1000
}

(3)ref的變量在視圖模板中都不要加.value,因為指令會自動加

2、isRef()

(1)作用:判斷一個變量是否為一個ref對象
(2)語法:const bol = isRef(x)

3、unref()

(1)作用:用于返回一個值,如果訪問的是ref變量,就返回其.value值。如果不是ref變量就直接返回
這是 val = isRef(val) ? val.value : val 計算的一個語法糖
(2)語法:const x = unref(y)

4、customRef()

(1)作用:自定義ref對象,把ref對象改寫成get/set,進一步可以為它們添加track/trigger

(2)、customRef()關聯的生命周期鉤子
onRenderTracked()
onRenderTriggered()
這兩個是用于調試的,只能在開發環境使用,生產環境不起作用。用來對變量進行劫持。

    const name = customRef((track, trigger)=>{ // track和trigger是兩個函數let value = ''return {get () {track() // 如果有人訪問name,就執行track()return value},set (val) {value = valtrigger() // 如果有人修改name,就執行trigger()}}})// 僅供在開發環境下,用于ref變量的調試onRenderTracked((ev)=>{console.log('name被跟蹤了', ev)})onRenderTriggered((ev)=>{console.log('name被修改了', ev)})

5、toRef()

(1)作用:把一個reactive對象中的某個屬性變成ref變量
(2)語法:const x = toRef(reactive(obj), 'key')

<script setup>import { reactive, toRef } from 'vue'const user = reactive({name: '張三', age: 10})console.log('---user', user)const name = toRef(user, 'name')console.log('---name', name.value) // name是ref變量</script>

6、toRefs()

(1)作用:把一個reactive響應式對象變成ref變量
(2)語法:const obj1 = toRefs(reactive(obj))
(3)應用:在子組件中接收父組件傳遞過來的props時,使用toRefs把它變成響應式的
例如:const {a, b} = toRefs(props)

<script setup>import { isRef, reactive, toRef, toRefs } from 'vue'const user = reactive({name: '張三', age: 10})console.log('---user', user)// const name = toRef(user, 'name')// console.log('---name', name.value) // name是ref變量const {name, age} = toRefs(user)console.log('---1', isRef(name))console.log('---2', isRef(age))</script>

7、shallowRef()

(1)作用:對復雜層級的對象,只將其第一層變成ref響應(性能優化)
用shallowRef包裹的對象,只有第一層變化才更新,更改后面的層不更新,第一層是.value
(2)語法:const x = shallowRef({a:{b:{c:1}}, d:2}),如此a、b、c、d變化都不會自動更新,需要借助triggerRef來強制更新
(3)shallowRef只劫持第一層

<script setup>import { isRef, reactive, toRef, toRefs, shallowRef, ref } from 'vue'// ref包裹對象const info1 = ref({a: {b: {c: 3}}})console.log('---3', info1.value.a.b.c) // 要訪問c,需要寫的很長const info2 = shallowRef({a: {b: {c: 3}}})console.log('---4', info2) // 只有info2.value = xxx 才會更新</script>

8、triggerRef()

(1)作用:強制更新一個shallowRef對象的渲染
(2)語法:triggerRef(shallowRef對象),只能接收一個shallowRef的變量,強制更新這個變量

9、reactive()

(1)作用:定義響應式變量,一般用于定義引用數據類型,如果是基本數據類型,建議使用ref來定義
(2)語法:const info = reactive([])
(3)如果定義對象類型、數組類型聲明式變量,用reactive定義

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

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

相關文章

項目管理中如何避免延期?核心策略分析

在項目管理中避免延期&#xff0c;并非依賴于單一技巧&#xff0c;而是要構筑一個系統性的、多維度的防御體系。其核心策略涵蓋了&#xff1a;進行全面細致的前期規劃與估算、實施嚴格的范圍管理與變更控制、建立主動式全過程風險管理機制、維持高透明度的持續溝通、以及采用數…

【計算機視覺與代碼大模型全景解析:從理論基礎到學習路線】

&#x1f4d8;計算機視覺與代碼大模型全景解析&#xff1a;從理論基礎到學習路線&#x1f4d1; 目錄1?? 摘要2?? 計算機視覺與大模型基礎理論??2.1 &#x1f9e0; 深度卷積神經網絡基礎原理??2.2 &#x1f441;??&#x1f5e8;? 計算機視覺的技術發展與視覺圖靈概念…

力扣-104. 二叉樹的最大深度

題目鏈接 104. 二叉樹的最大深度 class Solution {public int maxDepth(TreeNode root) {if (root null)return 0;return Math.max(maxDepth(root.left), maxDepth(root.right)) 1;} }小結&#xff1a;秒了&#xff01;&#xff01;&#xff01;

在超算平臺異構加速卡AI * 1卡的Ubuntu20.04環境下安裝docker服務(未成功)

為了使用dify&#xff0c;需要安裝docker服務&#xff0c;于是在超算平臺異構加速卡AI * 1卡的Ubuntu20.04環境下嘗試安裝docker服務 首先要看下系統是Ubuntu的哪個版本&#xff1a; cat /etc/os-release NAME"Ubuntu" VERSION"20.04.1 LTS (Focal Fossa)"…

[特殊字符] 深入解析String的不可變性:Java字符串設計的精妙之處

一、什么是String的不可變性? String的不可變性是Java語言中一個基礎但極其重要的概念。簡單來說:一旦一個String對象被創建,它的值就永遠不能被改變。任何看似"修改"字符串的操作,實際上都是創建了一個全新的String對象。 生活中的類比 想象一個刻在石頭上的文字…

基于FRP + ttyd 的遠程Web終端控制:無SSH環境下的救急方案

基于FRP ttyd 的遠程Web終端控制&#xff1a;無SSH環境下的救急方案一、背景&#xff1a;當遠程訪問陷入困境時二、方案&#xff1a;FRP內網穿透 ttyd Web終端三、操作步驟詳解&#xff08;Linux環境&#xff09;0. 前提條件1. 在被控服務器上創建工作目錄2. 下載必要的軟件3…

用 AI 自動生成口型同步視頻,短視頻內容也能一人完成

近幾年做跨境電商或內容運營的同學&#xff0c;應該都能感受到視頻內容正逐漸從“錦上添花”變成了“必選項”。尤其是 TikTok、Instagram Reels、Facebook 短視頻、甚至一些獨立站內嵌視頻講解頁&#xff0c;對帶講解、有人臉、自然語音的視頻內容都有顯著的轉化提升作用。但實…

全基因組關聯分析(GWAS)中模型參數選擇:MLM、GLM與FarmCPU的深度解析

全基因組關聯分析(GWAS)是識別與復雜性狀相關的遺傳變異的重要工具。然而&#xff0c;模型選擇不當會導致假陽性率升高或統計功效降低。本文將為大家介紹GWAS中如何選擇合適的模型參數&#xff0c;重點解析廣義線性模型(GLM)、混合線性模型(MLM)和FarmCPU三種主流模型的原理、區…

6.蘋果ios逆向-過ssl證書檢測-安裝SSL Kill Switch 3

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a;圖靈Python學院 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

Tomcat,WebLogic等中間件漏洞實戰解析

1.tomactCVE-2017-12615首先啟動環境&#xff0c;這里所有的漏洞都是在vulhub中的然后去訪問我們的網站點擊打開哥斯拉去生成一個jsp木馬然后打開抓包&#xff0c;刷新一下頁面&#xff0c;修改put方法將我們的木馬上傳一下&#xff0c;這里需要在jsp后加一個/&#xff0c;來繞…

15、點云<—>深度圖轉換原理

* 定義虛擬相機分辨率. Width := 800 Height := 800* 定義一個系數用于在3D模型中計算圖像的邊緣 BorderFact := 1.5* 是否選擇鏡頭. IsTelecentric := false GenParamName := [lut,intensity,disp_pose_0,alpha_0,disp_background] GenParamValue := [hsi,coord_z,true,0.3,tr…

大疆無人機開發:MQTT 賦能機場系統集成的Java實戰之旅

目錄 集成實現步驟? 項目初始化? MQTT 連接配置? 大疆無人機與 MQTT 集成? 機場系統功能實現? 代碼實戰與案例分析? 示例代碼展示? 案例分析? 數據格式不匹配問題? 指令沖突問題? 性能優化與安全保障? 性能優化策略? 安全保障措施? 集成實現步驟? …

邏輯回歸詳解:從數學原理到實際應用

文章目錄一、邏輯回歸的核心思想&#xff1a;從線性到概率1. 線性回歸的局限與突破Sigmoid函數特性&#xff08;代碼可視化&#xff09;&#xff1a;2. 邏輯回歸的預測公式二、損失函數&#xff1a;如何學習最優參數&#xff1f;1. 對數損失函數的數學定義損失函數解析&#xf…

粒子群優化算法(Particle Swarm Optimization, PSO) 求解二維 Rastrigin 函數最小值問題

前言 提醒&#xff1a; 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布&#xff0c;其中引用內容都會使用鏈接表明出處&#xff08;如有侵權問題&#xff0c;請及時聯系&#xff09;。 其中內容多為一次書寫&#xff0c;缺少檢查與訂正&#xff0c;如有問題或其他拓展…

【GitHub Workflows 基礎(二)】深入理解 on、jobs、steps 的核心語法與執行邏輯

&#x1f4d8; GitHub Workflows 基礎&#xff08;二&#xff09;&#xff1a;深入理解 on、jobs、steps 的核心語法與執行邏輯繼第一篇講完 .github/workflows/ 中多個工作流的結構后&#xff0c;本篇將深入 GitHub Actions 的核心三要素&#xff1a;on&#xff08;觸發器&…

React Filber及核心原理

1. React Fiber 的核心目標??增量渲染?&#xff1a;將大型更新拆解為可中斷的小任務&#xff08;時間切片&#xff09;&#xff0c;避免阻塞主線程?優先級調度?&#xff1a;動態管理任務執行順序&#xff08;如用戶交互 > 動畫 > 數據加載&#xff09;。與瀏覽器協作…

Shader開發(五)什么是渲染管線

在計算機圖形學中&#xff0c;渲染管線&#xff08;Rendering Pipeline&#xff09; 是圖形處理器&#xff08;GPU&#xff09;將3D網格數據轉化為屏幕圖像的核心流程。無論是炫酷的游戲畫面還是逼真的動畫場景&#xff0c;這一切都離不開渲染管線的默默工作。對于想要學習著色…

CentOS7 使用Docker安裝MinIO完整教程

目錄 1. MinIO簡介 什么是MinIO? 為什么選擇Docker安裝? 2. 環境準備 檢查Docker狀態 檢查防火墻設置 創建存儲目錄 3. 快速啟動MinIO 基礎啟動命令 驗證啟動狀態 4. 配置持久化存儲 停止并刪除臨時容器 使用數據卷啟動MinIO 驗證數據持久化 5. 訪問MinIO控制臺…

【數據庫】時序數據庫選型指南:從大數據視角看IoTDB的核心優勢

文章目錄前言-官網鏈接一、時序數據管理的時代挑戰二、時序數據庫選型的六大核心維度1. 數據模型設計2. 寫入與查詢性能3. 存儲效率4. 系統擴展性5. 生態兼容性6. 運維復雜度三、IoTDB的技術架構解析1. 存儲引擎創新2. 計算引擎優勢3. 分布式架構設計四、行業解決方案對比1. 能…

【25-cv-08364】Keith攜Hello Angel版權圖發案

Hello Angel版權圖案件號&#xff1a;25-cv-08364起訴時間&#xff1a;2025/7/22原告&#xff1a;Angelea Clark Van Dam原告律所&#xff1a;Keith受理法院&#xff1a;伊利諾伊州北區地方法院原告介紹原告是是一位來自澳大利亞的藝術家&#xff0c;筆名為Hello Angel&#xf…