5個實用的 Vue 技巧

在這篇文章中,我們將探討五個實用的 Vue 技巧,這些技巧可以使你日常使用 Vue 編程更高效、更富有成效。無論你是Vue的初學者還是經驗豐富的開發者,這些技巧都能幫助你編寫更清晰、更簡潔、更有效的代碼。那么,讓我們開始吧。

1. 在不失去反應性的情況下解構屬性

在 Vue 中,Props??是父子組件之間傳遞數據的強大方式。Prop 數據是響應性的,這意味著在父組件中對道具值的更改將反映在接收 Prop 的子組件中。然而,子組件不能直接修改 Prop 的值。相反,它應該發出一個事件來通知父組件更新 Prop。

在解構 Vue 的props時,prop數據在過程中會失去反應性。然而,有一種方法可以在解構props時保持反應性。你可以使用toRefs指令來包裝props對象,并在解構過程中保持反應性。有了這個指令,你可以在不擔心失去反應性的情況下解構prop數據。

<script setup lang="ts">
import { toRefs } from 'vue'const props = withDefaults(defineProps<{event: object;address: string;}>(),{}
);const { address } = toRefs(props)
</script><template><div class="font-medium bg-gray-100 text-gray-700 py-3 px-3 rounded">{{ address }}</div>
</template>

2. 創建自定義指令

Vue 指令是可以添加到HTML元素的特殊屬性,它們讓你能夠將動態數據和行為綁定到元素上。在Vue.js中,指令通過屬性名上的?v-?前綴來識別,并用于為HTML元素提供額外的功能。

一些最常用的 vue 指令包括:v-if,v-html,v-on,v-bind,v-pre,v-once?等等。在vuejs中,你可以創建自定義指令來執行特定的任務。我們將創建一個自定義的v-model指令,用于將輸入標簽中輸入的文本轉化為大寫。

<script setup>import { ref, vModelText } from 'vue'const value = ref("")// 為' v-model '指令定義一個名為'capitalize '的自定義修飾符vModelText.beforeUpdate = function (el, { value, modifiers }) {// 檢查' v-model '指令中是否存在' capitalize '修飾符if (value && modifiers.capitalize) {el.value = el.value.toUpperCase()}}
</script><template><input type="text" v-model.capitalize="value" />
</template>

指令是 Vue 中的一個強大功能,它允許你為應用程序的用戶界面添加動態功能。通過利用指令,我們可以創建更具交互性和響應性的應用程序,這些應用程序更易于維護和更新。

3. 針對Vue的性能標記

在應用程序中追蹤性能瓶頸非常重要,尤其是當你想要構建高性能的應用程序時。Vue 有一個特定的功能,可以在Chrome DevTools中啟用性能標記。

要在開發模式中啟用性能標記,可以將?performance??選項設置為 true。這樣我們能夠在瀏覽器開發工具的性能/時間線面板中追蹤組件的初始化、編譯、渲染和性能追蹤。

import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import { createPinia } from "pinia";
import piniaPluginPersistedstate from "pinia-plugin-persistedstate";
import { createHead } from "unhead";import "./style.css";const pinia = createPinia();
createHead();pinia.use(piniaPluginPersistedstate);const app = createApp(App);if (process.env.NODE_ENV === "development") {app.config.performance = true;
}app.use(router);
app.use(pinia);
app.mount("#app");

唯一的注意事項是,它只能在開發模式下以及支持性能標記API的瀏覽器中運行

4. 從組件外部調用方法

在Vue 中,我們可以借助?defineExpose?宏從特定組件外部調用方法。這在處理某種方式上相互依賴的多個組件時特別有用。

defineExpose?宏可以暴露出組件屬性,這些屬性可以在其他組件中通過refs進行訪問,從而允許你在特定組件中調用方法。這也可以讓你訪問變量聲明,props 等等。

<script setup lang="ts">function doSomething(){// do smething}defineExpose({ doSomething });
</script><div><h1>Child component</h1> 
</div>

現在我們可以在任何地方導入該組件,并按照下面的示例調用其中的各種方法。

<script setup lang="ts">
import { ref, onMounted} from 'vue';
import ChildComponent from './ChildComponent';
const childComponent = ref();onMounted(() => {childComponent.value.doSomething();
});
</script><div id="app"><ChildComponent ref="childComponent" />
</div>

5. 持久化Pinia 存儲

Pinia,是 Vue3 推薦的 store ,Pinia 簡化了 store實現,并且輕量級且具有性能優勢。使用 Pinia 管理 store時,持久化 store 數據非常重要。

pinia-plugin-persistedstate?是一個高度可定制的包,為這項任務提供自定義存儲、序列化器和路徑選擇選項。

請使用您喜歡的包管理器按照下面的方式安裝?pinia-plugin-persistedstate:

pnpm : pnpm i pinia-plugin-persistedstate
npm : npm i pinia-plugin-persistedstate
yarn : yarn add pinia-plugin-persistedstate

需要在?main.js?或?main.ts?文件中進行配置,如下所示。

import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import { createPinia } from "pinia";
import piniaPluginPersistedstate from "pinia-plugin-persistedstate";
import { createHead } from "unhead";import "./style.css";const pinia = createPinia();
createHead();// inject piniaPluginPersistedstate to pinia
pinia.use(piniaPluginPersistedstate);const app = createApp(App);app.use(router);
app.use(pinia);
app.mount("#app");

通過在您的 store ?中將?persist?屬性設置為?true,啟用Pinia存儲持久性:

import { defineStore } from "pinia";export const uselistingStore = defineStore(`listingStore`, {state: () => {return {data: [],};},persist: true,actions: {},getters: {},
});

總結

總的來說,這五個Vue.js的技巧可以極大地提升你的開發流程,使你的代碼更高效、更有效。從不失去反應性地解構屬性,到在Pinia中持久化存儲狀態,再到在組件外部訪問組件方法,這些技巧可以幫助你提升你的Vue. 技能。

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

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

相關文章

9.1 C++ STL 排序、算數與集合

C STL&#xff08;Standard Template Library&#xff09;是C標準庫中的一個重要組成部分&#xff0c;提供了豐富的模板函數和容器&#xff0c;用于處理各種數據結構和算法。在STL中&#xff0c;排序、算數和集合算法是常用的功能&#xff0c;可以幫助我們對數據進行排序、統計…

【JVM】JVM中的分代回收

文章目錄 分代收集算法什么是分代分代收集算法-工作機制MinorGC、 Mixed GC 、 FullGC的區別是什么 分代收集算法 什么是分代 在java8時&#xff0c;堆被分為了兩份&#xff1a; 新生代和老年代【1&#xff1a;2】 其中&#xff1a; 對于新生代&#xff0c;內部又被分為了三…

eclipse常用設置

1、調整編輯頁面字體大小 窗口 (Window)- 首選項&#xff08;Preferences&#xff09;- 常規&#xff08;General&#xff09;- 外觀 (Appearence)- 顏色與字體 (Colors And Fonts)&#xff0c;在右邊的對話框里選擇 Java - Java Editor Text Font&#xff0c;點擊出現的修改&…

【ARM 嵌入式 編譯系列 3.3 -- gcc 動態庫與靜態庫的鏈接方法介紹】

文章目錄 1.1 GCC 鏈接器 LD 介紹1.1.1 GCC 鏈接器 LD 常用參數介紹1.2 動態庫和靜態庫介紹1.2.1 動態庫和靜態庫優缺點1.2.2 庫文件鏈接方式1.2.3 ldd 工具介紹1.2.4 靜態庫鏈接時搜索路徑順序1.2.5 動態庫鏈接時、執行時搜索路徑順序1.2.6 頭文件搜索路徑1.2.7 有關環境變量上…

Neo4j之Aggregation基礎

在 Neo4j 中&#xff0c;聚合&#xff08;Aggregation&#xff09;是對數據進行計算、匯總和統計的過程。以下是一些使用聚合函數的常見例子&#xff0c;以及它們的解釋&#xff1a; 計算節點數量&#xff1a; MATCH (p:Person) RETURN count(p) AS totalPersons;這個查詢會計…

Socks5代理在多線程爬蟲中的應用

在進行爬蟲開發過程中&#xff0c;我們常常需要處理大量的數據&#xff0c;并執行多任務并發操作。然而&#xff0c;頻繁的請求可能會引起目標網站的反爬機制&#xff0c;導致IP封禁或限制訪問。為了規避這些限制&#xff0c;我們可以借助Socks5代理的強大功能&#xff0c;通過…

Nginx反向代理技巧

跨域 作為一個前端開發者來說不可避免的問題就是跨域&#xff0c;那什么是跨域呢&#xff1f; 跨域&#xff1a;指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的&#xff0c;是瀏覽器對javascript施加的安全限制。瀏覽器的同源策略是指協議&#xff0c;域名…

2011-2021年數字普惠金融指數Bartik工具變量法(含原始數據和Bartik工具變量法代碼)

2011-2021年數字普惠金融指數Bartik工具變量法&#xff08;含原始數據和Bartik工具變量法代碼&#xff09; 1、時間&#xff1a;2011-2020&#xff08;省級、城市&#xff09;&#xff0c;2014-2020&#xff08;區縣&#xff09; 2、原始數據來源&#xff1a;北大金融研究中心…

npm的鏡像源和代理的查看和修改

一、鏡像源 查詢當前鏡像源 npm get registry 設置為淘寶鏡像 npm config set registry http://registry.npm.taobao.org/ 設置回默認的官方鏡像 npm config set registry https://registry.npmjs.org/ 設置electron為淘寶鏡像 npm config set ELECTRON_MIRROR "h…

Redis對象類型和結構、內存回收、對象共享

對象類型和結構 在Redis中&#xff0c;無論是鍵key還是值value都是一個對象&#xff0c;每次對Redis數據庫創建一個新的鍵值對時&#xff0c;就至少會創建兩個對象。 常見的對象類型有&#xff1a; 字符串列表哈希集合有序集合 這些對象在Redis中統一用一個結構體redisObjec…

VS2019生成的DLL,給QT(MinGW版本)使用的小結

VS2019端&#xff1a; a 基于生成一個DLL的工程&#xff08;要注意生成是x86&#xff0c;還是x64的&#xff0c;需要和后面的QT的App工程對應&#xff09;&#xff0c;這里不多解釋了&#xff0c;網上多的是&#xff1b; b 在cpp實現文件里&#xff0c;假如要導出一個這樣的…

Git如何上傳文件到github

Git下載網址&#xff1a; https://git-scm.com/downloads 1. 新建一個空文件夾&#xff0c;用來上傳文件&#xff0c;第一次需創建&#xff0c;以后無需創建 2. 點進去空文件夾&#xff0c;鼠標右鍵&#xff0c;使用Git Bash Here 打開 3. 克隆遠程倉庫&#xff1a;git cl…

深入理解JVM——垃圾回收與內存分配機制詳細講解

所謂垃圾回收&#xff0c;也就是要回收已經“死了”的對象。 那我們如何判斷哪些對象“存活”&#xff0c;哪些已經“死去”呢&#xff1f; 一、判斷對象已死 1、引用計數算法 給對象中添加一個引用計數器&#xff0c;每當有一個地方引用它時&#xff0c;計數器就加一&…

解決git reset --soft HEAD^撤銷commit時報錯

今天在使用git回退功能的時候&#xff0c;遇到以下錯誤&#xff1a; 解決git reset --soft HEAD^撤銷commit時報錯 問題&#xff1a; 在進行完commit后&#xff0c;想要撤銷該commit&#xff0c;于是使用了git reset --soft HEAD^命令&#xff0c;但是出現如下報錯&#xff1…

【學習心得】安裝cuda/cudann和pytorch

一、查看驅動信息 # 進入CMD輸入命令 nvidia-smi 也可以右下角圖標打開NVIDIA 設置進行查看 二、下載安裝CUDA 1、下載 下載地址 https://developer.nvidia.com/ 2、安裝 推薦自定義安裝。建議只勾選Cuda&#xff0c;只安裝這一個就好&#xff0c;以免報錯安裝失敗。 3、驗證…

移動端直播相關技術總結

一、直播APP原理 二、直播APP架構 三、直播APP實現流程 四、流媒體開發 流媒體模塊架構 流媒體相關基礎知識 幀&#xff1a;每一幀代表一幅靜止的圖像 GOP&#xff1a;Group of Pictures&#xff0c;畫面組&#xff0c;一個GOP就是一組連續的畫面&#xff0c;很多幀的集合 碼率…

BC136 KiKi去重整數并排序

給定一個整數序列&#xff0c;KiKi想把其中的重復的整數去掉&#xff0c;并將去重后的序列從小到大排序輸出。 輸入描述 第一行&#xff0c;輸入一個整數n&#xff0c;表示序列有n個整數。 第二行輸入n個整數&#xff08;每個整數大于等于1&#xff0c;小于等于1000&#xf…

nodejs與前端js大文件、切片、視頻流相關技術示例

nodejs服務代碼 const express require("express"); const fs require("fs");const app express(); // 展示html頁面 app.get("/", function (req, res) {res.sendFile(__dirname "/index.html"); });// nodejs切片讀取文件示例 …

redis-配置詳解(基礎篇)

# 可以配置包含其他redis配置&#xff0c;可以使得配置更清晰化 # include /path/to/local.conf ################################## MODULES ##################################### # Load modules at startup. If the server is not able to load modules # it will abor…

拉丁方設計資料的方差分析(SPSS版+SAS版)

拉丁方設計&#xff08;Latin square design&#xff09;&#xff1a;實驗研究中涉及一個處理因素和兩個控制因素&#xff0c;每個因素的類別數或水平數相等&#xff0c;此時可采用拉丁方設計&#xff0c;將兩個控制因素分別安排在拉丁方設計的行和列上。該設計類型仍為單因素方…