《Vue3學習手記8》

vue3中的一些API

shallowRef ( ) 和shallowReactive ( )

shallowRef (淺層響應式)
1.作用:創建一個響應式數據,但只對頂層屬性進行響應式處理。
2.用法:
const original=ref(...)
const original2=shallowRef(original)
3.特點:只跟蹤引用值的變化,不關心值內部的屬性變化。

shallowReactive (淺層響應式)
1.作用:創建一個淺層響應式對象,只會使對象的最頂層屬性變成響應式的,對象內部的嵌套屬性則不會變成響應式的
2.用法:
const myObj = reactive({...})
const myObj2= shallowReactive({myObj})
3.特點:對象的頂層屬性是響應式的,但嵌套對象的屬性不是。

總結
通過使用shallowRef()和shallowReactive()來繞開深度響應。淺層式API創建的狀態只在其頂層是響應式的,對所有深層的對象不會做任何處理,避免了對每一個內部屬性做響應式所帶來的性能成本,這使得屬性的訪問變得更快,可提升性能。

readonly( ) 和 shallowReadonly( )

readonly
1.作用:用于創建一個對象的深只讀副本。 (不可修改)
2.用法:
const original = reactive({...})
const original2 = readonly({ original })
3.特點:
對象的所有嵌套屬性都將變為只讀
任何嘗試修改這個對象的操作都會被阻止(在開發模式下,還會在控制臺中發出警告)。
4.應用場景:
創建不可變的狀態快照。
保護全局狀態或配置不被修改。

shallowReadonly
1.作用:與readonly類似,但只作用于對象的頂層屬性。
2.用法:
const original = reactive({...})
const original2 = shallowReadonly({ original })
3.特點:
只將對象的頂層屬性設置為只讀,對象內部的嵌套屬性仍然是可變的。
適用于只需保護對象頂層屬性的場景。

toRaw( ) 和 markRaw( )

toRaw
1.作用:用于獲取一個響應式對象的原始對象。
2.toRaw返回的對象不再是響應式的,不會觸發視圖的更新。
場景:
在需要將響應式對象傳遞給非vue的庫或外部系統時,使用toRaw可以確保他們收到的是普通對象
用法:
const original = reactive({...}) //響應式數據
const original2 = toRaw({ original }) //原始數據

markRaw
1.作用:標記一個對象,使其永遠不會變成響應式的。
例如:第三方庫:mockjs
const mockJs = markRaw({mockjs})
const mockJs2 = reactive({ mockJs }) //mockJs2不是響應式數據

customRef

重點注意:track,trigger

<template><h2>信息是:{{msg}}</h2><input type="text" v-model="msg"><!-- 雙向綁定  獲取響應式數據 -->
</template><script setup lang="ts" name="App">import {ref} from "vue"const msg=ref("你好")
</script>

結果:
在這里插入圖片描述

<template><h2>信息是:{{msg}}</h2><input type="text" v-model="msg"><!-- 雙向綁定  獲取響應式數據 -->
</template><script setup lang="ts" name="App">import {customRef,ref} from "vue"// const msg=ref("你好")  //使用ref只能實現基本的響應式數據變化// 要求:表單中數據變化后1秒之后,h2中的數據發生改變// 這時用ref來做是不能實現的,所以使用自定義響應式:customRef  (customRef是一個函數)let initValue=""let timerconst msg=customRef((track,trigger)=>{  //回調函數里有兩個參數:track(跟蹤)和trigger(觸發)return {get(){   //讀取msg時調用get()track()  //告訴vue數據很重要,需要持續關注,一旦有變化就要更新  (跟蹤)return initValue},set(value){   //msg發生變化時調用set()clearTimeout(timer)  //防止重復開啟定時器timer=setTimeout(()=>{initValue=valuetrigger()  //通知vue數據改變},1000)}}})
</script>

封裝自定義響應式數據:
App.vue:

<template><h2>信息是:{{msg}}</h2><input type="text" v-model="msg"><!-- 雙向綁定  獲取響應式數據 -->
</template><script setup lang="ts" name="App">import {customRef,ref} from "vue"// const msg=ref("你好")  //使用ref只能實現基本的響應式數據變化// 要求:表單中數據變化后1秒之后,h2中的數據發生改變// 這時用ref來做是不能實現的,所以使用自定義響應式:customRef  (customRef是一個函數)import useMsgRef from "./useMsgRef";const {msg}=useMsgRef("你好啊",2000)  //傳入兩個參數
</script>

useMsgRef.ts:

// 封裝自定義ref
import {customRef} from "vue"export default function(initValue:string,delay:number){  //注意這里的參數let timerconst msg=customRef((track,trigger)=>{  //回調函數里有兩個參數:track(跟蹤)和trigger(觸發)return {get(){   //讀取msg時調用get()track()  //告訴vue數據很重要,需要持續關注,一旦有變化就要更新  (跟蹤)return initValue},set(value){   //msg發生變化時調用set()clearTimeout(timer)  //防止重復開啟定時器timer=setTimeout(()=>{initValue=valuetrigger()  //通知vue數據改變},delay)}}})return {msg}}

Teleport

作用:將組件html結構移動到指定位置的技術
ModalPage.vue:

<template><div class="modal"><h2>我是ModalPage組件</h2><button @click="isShow=true">展開彈框</button><teleport to="body">   <!-- <teleport to=".app"> --><div class="content" v-show="isShow"><h2>彈框標題</h2><h2>彈框內容</h2><button @click="isShow=false">關閉彈框</button></div></teleport></div>
</template><script setup name="ModalPage">
import {ref} from "vue"
const isShow=ref(false)
</script><style scoped>.modal {width: 600px;height: 200px;background-color: pink;box-shadow: 0 0 10px;border-radius: 5px;margin-top: 50px;}.content {background-color: skyblue;width: 320px;height: 200px;text-align: center;position:fixed;/* position:fixed;以視口為參照物 */top:50%;left:50%;transform: translate(-50%,-50%);}
</style>

App.vue:

<template><div class="app"><h2>我是App組件</h2><img src="./assets/images/11.png"><ModalPage/></div>
</template><script setup lang="ts" name="App">import ModalPage from "./components/ModalPage.vue"
</script><style scoped>.app {width: 800px;height: 600px;background-color: #ddd;border-radius: 10px;box-shadow: 0 0 10px;}img {width: 200px;height: 130px;background-size: cover;/* 對于以前: *//* 當不加css樣式中的filter濾鏡時,子組件的position:fixed是可以根據視口來調整大小 *//* 但當加上這個樣式之后,position:fixed失效 */filter: saturate(200%);/* saturate是飽和度的意思 *//* 解決方法:在模板中給需要根據視口調整大小的內容外包上<teleport>標簽 并加上to屬性(具體見子組件) */}
</style>

Suspense

等待異步組件時渲染一些額外內容,讓應用有更好的用戶體驗使用步驟:

  1. 異步引入組件
  2. 使用Suspense包裹組件,并配置好defaultfallback
    App.vue:
<template><div class="app"><h2>我是App組件</h2><!-- 當子組件里要處理異步任務,網速慢時想要在頁面呈現一些東西就可以使用Suspense --><Suspense><template v-slot:default><ModalPage/></template></Suspense><!-- 當網速慢,頁面沒加載出來時可以顯示的內容 --><Suspense><template v-slot:fallback><h2>loading...</h2></template></Suspense></div>
</template><script setup lang="ts" name="App">import ModalPage from "./components/ModalPage.vue"
</script>

ModalPage.vue:

<template><div class="modal"><h2>我是ModalPage組件</h2>  </div>
</template><script setup name="ModalPage">
import {ref} from "vue"
import axios from "axios"
// 異步獲取數據
let msg=await axios.get("https://api.uomg.com/api/rand.qinghua?format=json")
console.log(msg)
</script>

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

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

相關文章

雙列集合——map集合和三種遍歷方式

雙列集合的特點 鍵和值一一對應&#xff0c;每個鍵只能對應自己的值 一個鍵和值整體稱為鍵值對或鍵值對對象&#xff0c;java中叫做entry對象。 map常見的api map接口中定義了雙列集合所有的共性方法&#xff0c;下面三個實現類就沒有什么額外新的方法要學習了。 map接口…

Linux安裝部署Postgresql數據庫

聯網安裝方案 Linux能在線安裝依賴組件的前提下&#xff0c;可以快速安裝部署PG數據庫&#xff0c;安裝過程使用root管理員帳號&#xff1a; 首先&#xff0c;使用如下命令自動下載Postgresql組件&#xff1a; # 在openEuler、Fedora或CentOS 8上&#xff0c;你可能會使用&a…

供應鏈算法整理(二)--- 智能補貨

供應鏈業務的目標價值是&#xff1a;優化貨品的供給、銷售提供支撐&#xff0c;以降低成本&#xff0c;提高時效、收益&#xff0c;最終提升用戶體驗。基于目標價值&#xff0c;整體的算法模塊分為&#xff1a;智能選品、智能預測、品倉鋪貨、智能補貨、智能調撥、倉網路由、快…

vscode 個性化

vscode 個性化 設置 吸頂效果 使用前使用后 設置方法 VS Code 的粘性滾動預覽 - 類似于 Excel 的凍結首行 插件 代碼片段分享 - CodeSnap 使用方式 CtrlShiftP輸入CodeSnap 喚起插件選擇代碼 行內報錯提示 - Error Lens 使用前使用后 VSCode Error Lens插件介紹&…

Rockermq的部署與使用(0-1)

?RocketMQ? 是阿里巴巴開源的一款 ?分布式消息中間件&#xff0c;具有高吞吐、低延遲、高可用等特點&#xff0c;廣泛應用于多個領域&#xff0c;包括異步通信解耦、企業解決方案、金融支付、電信、電子商務、快遞物流、廣告營銷、社交、即時通信、移動應用、手游、視頻、物…

軟件測試報告機構如何保障軟件質量并維護其安全性?

軟件測試報告機構在軟件開發流程里起著十分關鍵的作用&#xff0c;它可以保障軟件的質量&#xff0c;它還能夠維護軟件的安全性。下面&#xff0c;我們就來深入了解一下這類機構。 機構作用 軟件測試報告機構是軟件質量的“把關者”&#xff0c;能對軟件進行全面評估&#xf…

4個純CSS自定義的簡單而優雅的滾動條樣式

今天發現 uni-app 項目的滾動條不顯示&#xff0c;查了下原來是設置了 ::-webkit-scrollbar {display: none; } 那么怎么用 css 設置滾動條樣式呢&#xff1f; 定義滾動條整體樣式? ::-webkit-scrollbar 定義滾動條滑塊樣式 ::-webkit-scrollbar-thumb 定義滾動條軌道樣式?…

ES6入門---第二單元 模塊五:模塊化

js不支持模塊化 注意&#xff1a; 需要放到服務器環境 1、如何定義模塊&#xff1f; export 東西 例&#xff1a;1.js文件中 console.log(1模塊加載了);//顯示是否加載了 export const a 12; export const b 5; export let c 101; const a12; const b5; const c101;ex…

14.Excel:排序和篩選

一 位置 兩個位置。 二 排序&#xff1a;如何使用 1.常規使用 補充&#xff1a;不彈出排序提醒排序。 選中要排序列中的任意一個單元格&#xff0c;然后排序。 2.根據要求進行排序 1.根據姓名筆畫進行降序排序 要勾選上數據包含標題&#xff0c;默認是勾選了。 2.根據運營部、…

嵌入式系統基礎知識

目錄 一、馮諾依曼結構與哈佛結構 &#xff08;一&#xff09;馮諾依曼結構 &#xff08;二&#xff09;哈佛架構 二、ARM存儲模式 &#xff08;一&#xff09;大端模式 &#xff08;二&#xff09;小端模式 &#xff08;三&#xff09;混合模式 三、CISC 與 RISC &am…

CSS 預處理器 Sass

目錄 Sass 一、Sass 是什么&#xff1f; 二、核心功能詳解 1. 變量&#xff08;Variables&#xff09; 2. 嵌套&#xff08;Nesting&#xff09; 3. 混合宏&#xff08;Mixins&#xff09; 4. 繼承&#xff08;Inheritance&#xff09; 5. 運算&#xff08;Operations&…

信息收集新利器:SSearch Chrome 插件來了

SSearch 下載地址 SSearch &#x1f623;用途 每次谷歌語法搜索時還得自己寫&#xff0c;我想省事一點&#xff0c;弄了一個插件&#xff0c;先加了幾個常用的語法&#xff0c;點擊后會跳轉到對應搜索頁面&#xff0c;也可以直接在搜索框微調 后續也會加些其他語法 &#…

Docker搭建SFTP

在這個教程中&#xff0c;我們將通過一個簡單的例子來展示如何使用 Docker 和 atmoz/sftp 鏡像設置一個基本的 SFTP 服務。這個服務將允許用戶通過 SFTP 安全地訪問和管理文件。我們將配置一個名為 ops 的用戶&#xff0c;其密碼為 123456&#xff0c;并限定用戶只能訪問特定的…

正態分布習題集 · 答案與解析篇

正態分布習題集 答案與解析篇 與題目篇編號一致,如有其他解題思路,歡迎在評論區交流。 1. 基礎定義與性質 1.1 密度函數 X ~ N ( μ , σ 2 ) X \sim N(\mu,\sigma^2) X~N(μ,σ2) 的 PDF: [ f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)2}{2\sigma2}\…

Java學習手冊:SQL 優化技巧

一、SQL 查詢優化 選擇合適的索引列 &#xff1a;索引可以顯著提高查詢速度&#xff0c;但需要選擇合適的列來創建索引。通常&#xff0c;對于頻繁作為查詢條件的列、連接操作的列以及排序或分組操作的列&#xff0c;應該考慮創建索引。例如&#xff0c;在一個訂單表中&#xf…

(02)Redis 的訂閱發布Pub/Sub

我們為了自己實現一個MQ功能&#xff0c;就要深入底層挖掘現有開源產品的實現過程。 Redis 發布訂閱底層結構解析 Redis 不存儲消息&#xff0c;僅作為“實時中轉”&#xff1b;只有訂閱者在線時才能收到消息&#xff1b;消息是廣播給所有訂閱此頻道的客戶端。 1. 核心數據結…

使用Docker一鍵安裝SigLens:簡單快捷的日志分析解決方案

在當今復雜的IT環境中,高效的日志管理和分析變得越來越重要。SigLens作為一款強大的開源日志分析工具,為開發者和運維人員提供了直觀、高效的日志處理體驗。本文將介紹如何使用Docker快速安裝SigLens,讓您在幾分鐘內就能開始進行日志分析。 為什么選擇Docker安裝SigLens? Do…

C#與西門子PLC通信:S7NetPlus和HslCommunication使用指南

西門子S7協議是用來和PLC進行通訊的一個協議&#xff0c;默認端口是102&#xff0c;數據會保存在一個個DB塊中&#xff0c;比較經典的用法是一個DB塊專門用來讀取&#xff0c;一個用來寫入。 DB&#xff08;數據塊&#xff09; {塊號}.DBX/DBD/DBW{字節地址}.{位偏移} 1、數據…

【中間件】brpc_基礎_remote_task_queue

文章目錄 remote task queue1 簡介2 核心功能2.1 任務提交與分發2.2 無鎖或低鎖設計2.3 與 bthread 深度集成2.4 流量控制與背壓 3 關鍵實現機制3.1 數據結構3.2 任務提交接口3.3 任務竊取&#xff08;Work Stealing&#xff09;3.4 同步與喚醒 4 性能優化5 典型應用場景6 代碼…

C語言實現數據結構:堆排序和二叉樹_鏈式

一.堆的應用 1.堆排序 void test01() {int arr[] { 17,20,10,13,19,15 };int n sizeof(arr) / sizeof(arr[0]);HP p;HPInit(&p);for (int i 0; i < n; i){HPPush(&p, arr[i]);}int i 0;while (!HPEmpty(&p)){arr[i] HPTop(&p);HPPop(&p);}for (i…