5個(gè)實(shí)用的Vue技巧分享
在這篇文章中,我們將探討五個(gè)實(shí)用的 Vue 技巧,這些技巧可以使你日常使用 Vue 編程更高效、更富有成效。無(wú)論你是Vue的初學(xué)者還是經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,這些技巧都能幫助你編寫(xiě)更清晰、更簡(jiǎn)潔、更有效的代碼。那么,讓我們開(kāi)始吧。
1. 在不失去反應(yīng)性的情況下解構(gòu)屬性
在 Vue 中,Props 是父子組件之間傳遞數(shù)據(jù)的強(qiáng)大方式。Prop 數(shù)據(jù)是響應(yīng)性的,這意味著在父組件中對(duì)道具值的更改將反映在接收 Prop 的子組件中。然而,子組件不能直接修改 Prop 的值。相反,它應(yīng)該發(fā)出一個(gè)事件來(lái)通知父組件更新 Prop。
在解構(gòu) Vue 的props時(shí),prop數(shù)據(jù)在過(guò)程中會(huì)失去反應(yīng)性。然而,有一種方法可以在解構(gòu)props時(shí)保持反應(yīng)性。你可以使用toRefs指令來(lái)包裝props對(duì)象,并在解構(gòu)過(guò)程中保持反應(yīng)性。有了這個(gè)指令,你可以在不擔(dān)心失去反應(yīng)性的情況下解構(gòu)prop數(shù)據(jù)。
<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. 創(chuàng)建自定義指令
Vue 指令是可以添加到HTML元素的特殊屬性,它們讓你能夠?qū)?dòng)態(tài)數(shù)據(jù)和行為綁定到元素上。在Vue.js中,指令通過(guò)屬性名上的 v- 前綴來(lái)識(shí)別,并用于為HTML元素提供額外的功能。
一些最常用的 vue 指令包括:v-if,v-html,v-on,v-bind,v-pre,v-once 等等。在vuejs中,你可以創(chuàng)建自定義指令來(lái)執(zhí)行特定的任務(wù)。我們將創(chuàng)建一個(gè)自定義的v-model指令,用于將輸入標(biāo)簽中輸入的文本轉(zhuǎn)化為大寫(xiě)。
<script setup>
import { ref, vModelText } from 'vue'
const value = ref("")
// 為' v-model '指令定義一個(gè)名為'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 中的一個(gè)強(qiáng)大功能,它允許你為應(yīng)用程序的用戶(hù)界面添加動(dòng)態(tài)功能。通過(guò)利用指令,我們可以創(chuàng)建更具交互性和響應(yīng)性的應(yīng)用程序,這些應(yīng)用程序更易于維護(hù)和更新。
3. 針對(duì)Vue的性能標(biāo)記
在應(yīng)用程序中追蹤性能瓶頸非常重要,尤其是當(dāng)你想要構(gòu)建高性能的應(yīng)用程序時(shí)。Vue 有一個(gè)特定的功能,可以在Chrome DevTools中啟用性能標(biāo)記。
要在開(kāi)發(fā)模式中啟用性能標(biāo)記,可以將 performance 選項(xiàng)設(shè)置為 true。這樣我們能夠在瀏覽器開(kāi)發(fā)工具的性能/時(shí)間線面板中追蹤組件的初始化、編譯、渲染和性能追蹤。
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");唯一的注意事項(xiàng)是,它只能在開(kāi)發(fā)模式下以及支持性能標(biāo)記API的瀏覽器中運(yùn)行
4. 從組件外部調(diào)用方法
在Vue 中,我們可以借助 defineExpose 宏從特定組件外部調(diào)用方法。這在處理某種方式上相互依賴(lài)的多個(gè)組件時(shí)特別有用。
defineExpose 宏可以暴露出組件屬性,這些屬性可以在其他組件中通過(guò)refs進(jìn)行訪問(wèn),從而允許你在特定組件中調(diào)用方法。這也可以讓你訪問(wèn)變量聲明,props 等等。
<script setup lang="ts">
function doSomething(){
// do smething
}
defineExpose({ doSomething });
</script>
<div>
<h1>Child component</h1>
</div>現(xiàn)在我們可以在任何地方導(dǎo)入該組件,并按照下面的示例調(diào)用其中的各種方法。
<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 存儲(chǔ)
Pinia,是 Vue3 推薦的 store ,Pinia 簡(jiǎn)化了 store實(shí)現(xiàn),并且輕量級(jí)且具有性能優(yōu)勢(shì)。使用 Pinia 管理 store時(shí),持久化 store 數(shù)據(jù)非常重要。
pinia-plugin-persistedstate 是一個(gè)高度可定制的包,為這項(xiàng)任務(wù)提供自定義存儲(chǔ)、序列化器和路徑選擇選項(xiàng)。
請(qǐng)使用您喜歡的包管理器按照下面的方式安裝 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 文件中進(jìn)行配置,如下所示。
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");通過(guò)在您的 store 中將 persist 屬性設(shè)置為 true,啟用Pinia存儲(chǔ)持久性:
import { defineStore } from "pinia";
export const uselistingStore = defineStore(`listingStore`, {
state: () => {
return {
data: [],
};
},
persist: true,
actions: {
},
getters: {
},
});總結(jié)
總的來(lái)說(shuō),這五個(gè)Vue.js的技巧可以極大地提升你的開(kāi)發(fā)流程,使你的代碼更高效、更有效。從不失去反應(yīng)性地解構(gòu)屬性,到在Pinia中持久化存儲(chǔ)狀態(tài),再到在組件外部訪問(wèn)組件方法,這些技巧可以幫助你提升你的Vue. 技能。
到此這篇關(guān)于5個(gè)實(shí)用的Vue技巧分享的文章就介紹到這了,更多相關(guān)Vue技巧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue?結(jié)合Sortablejs實(shí)現(xiàn)table行排序功能
在一個(gè)列表展示頁(yè)面上,使用了表格組件,原有組件本身不支持拖拽功能,需求要求在列表的基礎(chǔ)上支持行拖拽排序,因此引入了www.sortablejs.com插件,接下來(lái)通過(guò)本文給大家講解Vue?結(jié)合Sortablejs實(shí)現(xiàn)table行排序功能,需要的朋友可以參考下2022-10-10
vue動(dòng)態(tài)的 BreadCrumb 組件el-breadcrumb ElementUI詳解
這篇文章主要介紹了vue如何做一個(gè)動(dòng)態(tài)的 BreadCrumb 組件,el-breadcrumb ElementUI2024-07-07
,本文通過(guò)圖文示例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
解決antd datepicker 獲取時(shí)間默認(rèn)少8個(gè)小時(shí)的問(wèn)題
這篇文章主要介紹了解決antd datepicker 獲取時(shí)間默認(rèn)少8個(gè)小時(shí)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
Vue開(kāi)發(fā)實(shí)現(xiàn)吸頂效果的示例代碼
這篇文章主要介紹了Vue開(kāi)發(fā)實(shí)現(xiàn)吸頂效果的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
vue-baidu-map 進(jìn)入頁(yè)面自動(dòng)定位的解決方案(推薦)
這篇文章主要介紹了vue-baidu-map 進(jìn)入頁(yè)面自動(dòng)定位的解決方案,需要的朋友可以參考下2018-04-04
Vue解決element-ui消息提示$message重疊問(wèn)題
這篇文章主要為大家介紹了Vue解決element-ui消息提示$message重疊問(wèn)題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Vue路由this.route.push跳轉(zhuǎn)頁(yè)面不刷新的解決方案
這篇文章主要介紹了Vue路由this.route.push跳轉(zhuǎn)頁(yè)面不刷新的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
基于Vue實(shí)現(xiàn)頁(yè)面切換左右滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了基于Vue實(shí)現(xiàn)頁(yè)面切換左右滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

