vue3學習 【4】ref和reactive的使用并于ts結合

使用ref聲明一個響應式對象并使用

<script lang="ts" setup>
import { ref } from 'vue';
const message = ref("HelloWorld")
message.value="被修改了啊~~"
</script>
<template>{{ message }}
</template>

ref() 接收參數,并將其包裹在一個帶有 .value 屬性的 ref 對象中返回,如果在js中使用需要XX.value來操作其內容,在模板中可以直接使用,因為已經自動解包了

為什么ref可以變成響應式

vue會在首次渲染的時候追蹤所有的ref,將ref對象進行一次封裝,如果是普通對象我們是沒辦法檢測他的修改和訪問的,所以我們將他封裝成對象,然后通過gettersetter方法攔截對象屬性的get和set操作。
.value屬性就是用來檢測ref合適被訪問和修改的,可以參考如下偽代碼:

// 偽代碼,不是真正的實現
const myRef = {_value: 0,get value() {track()return this._value},set value(newValue) {this._value = newValuetrigger() //用來做一些通知,}
}

使用reactive聲明一個響應式對象并使用

<script lang="ts" setup>
import { ref, reactive } from 'vue';
const message = ref("HelloWorld")
const user = reactive({name: "三千",age: 18
})
user.name = "八百"
</script>
<template>{{ message }}{{ user.name }}
</template>
  1. reactive()將對象本身變的具有響應性,所以他只能用于對象類型,不支持string number boolean等原始類型。
  2. reactive() 返回的是一個原始對象的 Proxy,它和原始對象是不相等的.
const raw = {}
const proxy = reactive(raw)// 代理對象和原始對象不是全等的
console.log(proxy === raw) // false
  1. reactive對結構操作不友好,如果我們對reactive進行結構,那他將失去響應性鏈接

在TS中如何使用 ref 和reactive

<script lang="ts" setup>
import { ref, reactive } from 'vue';
const message = ref<string>("HelloWorld")
interface User {name: string,age: number
}
const user = reactive<User>({name: "三千",age: 18
})
user.name = "八百"
</script>
<template>{{ message }}{{ user.name }}
</template>

怎么選擇

雖然沒有嚴格的規則,但在某些情況下,使用一些特定的內容才是最佳實踐,當然你也能夠 ref 一把梭哈

  1. 如果你需要一個響應式原始值,那么使用 ref() 是正確的選擇,要注意是原始值
  2. 如果你需要一個響應式對象,層級不深,那么使用 ref也可以
  3. 如果您需要一個響應式可變對象,并且對象層級較深,需要深度跟蹤,那么使用 reactive

你可以把 reactive 看成 ref 的子集,ref 可以解決一切煩惱

參考地址

官網
ref和reactive你必須要知道的使用場景和差異

本文大部分內容皆為參考官網,并加以自己的一定理解,如有不對之處,望大家不吝指正

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

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

相關文章

Vue——攜帶參數跳轉路由

Vue學習之——跳轉路由 前情回顧 當我們進行點擊修改時&#xff0c;會進行跳轉到修改頁面&#xff0c;為了完成回顯數據&#xff08;根據對應id查找&#xff09;&#xff0c;我們需要攜帶對應選擇中的id跳轉到修改頁面&#xff0c;讓其進行查找回顯 學習useRoute和useRoute…

webstorm2023.3.4安裝與破解

WebStorm安裝步驟 打開JetBrains官方網站&#xff08;https://www.jetbrains.com/webstorm/&#xff09; 運行.exe 選擇安裝路徑 第一個意思是是否創建桌面快捷方式&#xff0c;可根據需要選擇&#xff1b;第二個.js .css .html勾選后之后js css html文件默認會用webstor…

AI Agent

目錄 一、什么是Agent 二、什么是MetaGPT【多智能體框架介紹】 三、MetaGPT的背景 一、什么是Agent 智能體 LLM觀察思考行動記憶 Agent&#xff08;智能體&#xff09; 一個設置了一些目標或任務&#xff0c;可以迭代運行的大型語言模型。這與大型語言模型&#xff08;LLM&am…

985機械研一轉碼,java還是c++?

985機械研一轉碼&#xff0c;java還是c&#xff1f; 在開始前我分享下我的經歷&#xff0c;我剛入行時遇到一個好公司和師父&#xff0c;給了我機會&#xff0c;一年時間從3k薪資漲到18k的&#xff0c; 我師父給了一些 電氣工程師學習方法和資料&#xff0c;讓我不斷提升自己&…

一鍵下載電路(for STM32 and mcuisp)

一鍵下載電路 1. STM32 一鍵下載電路2. 燒錄軟件&#xff1a;mcuisp和FlyMcu下載3. 遇到問題 1. STM32 一鍵下載電路 博文連接 2. 燒錄軟件&#xff1a;mcuisp和FlyMcu下載 mcuisp和FlyMcu下載 3. 遇到問題 按如上博文電路設計&#xff0c;上電發現程序沒有進入 main() 函…

【OpenGL的著色器03】內置變量(gl_Position等)

目錄 一、說明 二、著色器的變量 2.1 著色器變量 2.2 著色器內置變量 三、最常見內置變量使用范例 3.1 常見著色器變量 3.2 示例1&#xff1a; gl_PointSize 3.3 示例2&#xff1a;gl_Position 3.4 gl_FragColor 3.5 渲染點片元坐標gl_PointCoord 3.6 gl_PointCoo…

【PyTorch][chapter 20][李宏毅深度學習]【無監督學習][ GAN]【實戰】

前言 本篇主要是結合手寫數字例子,結合PyTorch 介紹一下Gan 實戰 第一輪訓練效果 第20輪訓練效果,已經可以生成數字了 68 輪 目錄&#xff1a; 谷歌云服務器&#xff08;Google Colab&#xff09; 整體訓練流程 Python 代碼 一 谷歌云服務器&#xff08;Google Colab&…

Linux學習-字符串數組和字符串

目錄 使用場景 字符型數組定義&#xff1a; 初始化 數組儲存 打印 字符型數組常見函數 常見操作 strcpy&#xff1a;字符串拷貝 strcat&#xff08;str1&#xff0c;str2&#xff09;字符串拼接 strcmp&#xff1a;字符串比較 注意&#xff1a; 二維字符型數…

Open CASCADE學習|曲線曲面連續性

1、曲線的連續性 曲線的連續性是三維建模、動畫設計等領域中非常重要的一個概念&#xff0c;它涉及到曲線在不同點之間的連接方式和光滑程度。下面將詳細介紹曲線的連續性&#xff0c;包括C連續性和G連續性。 1.1C連續性&#xff08;參數連續性&#xff09; C連續性是指曲線…

使用MyBatisPlus實現向數據庫中存儲List類型的數據

使用MyBatisPlus實現向數據庫中存儲List類型的數據 問題描述 建表時&#xff0c;表中的這五個字段為json類型 但是在入庫的時候既不能寫入數據&#xff0c;也不能查詢出數據。 解決方案&#xff1a; 1.首先明確&#xff0c;數據存入的時候是經過了數據類型轉化&#xff0c…

中國電子學會2020年06月真題C語言軟件編程等級考試三級(含詳細解析答案)

中國電子學會考評中心歷屆真題&#xff08;含解析答案&#xff09; C語言軟件編程等級考試三級 2020年06月 編程題五道 總分:100分一、最接近的分數&#xff08;20分&#xff09; 分母不超過N且小于A/B的最大最簡分數是多少? 時間限制: 1000ms 內存限制: 65536kb 輸入…

數據之光:探索數據庫技術的演進之路

?? 歡迎大家來訪Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭?&#xff5e;?? &#x1f31f;&#x1f31f; 歡迎各位親愛的讀者&#xff0c;感謝你們抽出寶貴的時間來閱讀我的文章。 我是Srlua&#xff0c;在這里我會分享我的知識和經驗。&#x…

喜訊!持安科技CEO何藝獲評安全419《2023年度十大優秀創業者》

近日&#xff0c;由網絡安全產業資訊媒體安全419主辦的《年度策劃》2023年度十大優秀創業者正式出爐&#xff0c;零信任辦公安全技術創新企業持安科技創始人兼CEO何藝&#xff0c;獲評十大優秀創業者。 這是安全419第二屆推出該項目的評選活動&#xff0c;安全419編輯老師在多年…

抽象類、模板方法模式

抽象類概述 在Java中abstract是抽象的意思&#xff0c;如果一個類中的某個方法的具體實現不能確定&#xff0c;就可以申明成abstract修飾的抽象方法&#xff08;不能寫方法體了&#xff09;&#xff0c;這個類必須用abstract修飾&#xff0c;被稱為抽象類。 抽象方法定義&…

【解決】修改 UI界面渲染層級 的常見誤區

開發平臺&#xff1a;Unity 2021版本 ? 問題描述 Unity 中管理 UI 上顯示元素的前后層級關系大致為以下兩種方式&#xff1a; 方式一&#xff1a;修改UI元素隊列順序與層級方式二&#xff1a;使用 Canvas 組件中的 Override Sort 屬性配置 方式二 對應復雜的 UI 層級關系將常…

這些單片機匯編語言的錯誤,你還在犯錯嗎?

在單片機開發中&#xff0c;很多工程師會選擇匯編語言來作為底層編程&#xff0c;來直接控制硬件和高校執行命令&#xff0c;然而因為匯編語言是直接與硬件交互&#xff0c;所以很容易出現錯誤&#xff0c;本文將基于Keil C51匯編器的環境總結單片機匯編語言常見的錯誤&#xf…

人工智能_大模型010_Centos7.9中CPU安裝ChatGLM3-6B大模型_安裝使用_010---人工智能工作筆記0145

從一個空的虛擬機開始安裝: https://www.modelscope.cn/models/ZhipuAI/chatglm3-6b/files 可以看到這里有很多的數據文件,那么這里 這里點擊模型文件就可以下載,這個就是chatglm3-6B的文件,需要點擊每個文件,然后點擊右邊的下載,把文件都下載下來 右側有下載按鈕.點擊下載可…

使用Fabric創建的canvas畫布背景圖片,自適應畫布寬高

之前的文章寫過vue2使用fabric實現簡單畫圖demo&#xff0c;完成批閱功能&#xff1b;但是功能不完善&#xff0c;對于很大的圖片就只能顯示一部分出來&#xff0c;不符合我們的需求。這就需要改進&#xff0c;對我們設置的背景圖進行自適應。 有問題的canvas畫布背景 修改后的…

Unity2023.1.19_ECS

Unity2023.1.19_ECS 在學習的路上一往無前的遇到了好東西&#xff0c;官方的EntityComponnentSystemSamples的Repository&#xff0c;這是一個包含實體&#xff0c;圖形&#xff0c;網絡&#xff0c;物理案例的全方位案例教程。 又找見接下來要干的事情了&#xff01;學習永無…

【rust】11、所有權

文章目錄 一、背景二、Stack 和 Heap2.1 Stack2.2 Heap2.3 性能區別2.4 所有權和堆棧 三、所有權原則3.1 變量作用域3.2 String 類型示例 四、變量綁定背后的數據交互4.1 所有權轉移4.1.1 基本類型: 拷貝, 不轉移所有權4.1.2 分配在 Heap 的類型: 轉移所有權 4.2 Clone(深拷貝)…