日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue 中watch函数名_vue中避免使用函数来绑定依赖

發(fā)布時間:2025/3/21 vue 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue 中watch函数名_vue中避免使用函数来绑定依赖 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如果你正在使用vue編寫業(yè)務,可能遇到一個數(shù)據(jù)比較多,他們都遵循相同的模式,需要在data里定義多個變量來綁定依賴,然后你不想在data里定義多個變量,在接口調回后每個都重新賦值,采用這種方式綁定依賴:

<div v-if='fuctionA(args)'> </div> <div v-for='item in fuctionB()' ><div v-if='functionC(item)' :style='fuctionA(item.attribute)'></div> </div>

所有的依賴都通過一個函數(shù)return,給函數(shù)傳入不同參數(shù)來返回一個數(shù)據(jù),這種寫法雖然簡潔,data中不用定義變量,但會導致當觸發(fā)組件更新時,這些函數(shù)又會全部執(zhí)行一次 如果你的數(shù)組長度過長,或者組件更新很頻繁,就會導致內存占用過大,函數(shù)暴棧,頁面崩潰等問題

比如以下示例:

<template><div><div v-for="item in navList" :style="styleConfig('nav')" :key="item.id">導航父級菜單<div v-for="item2 in item.chilren" :key="item2.id" :style="styleConfig('navChild')">子菜單</div></div><div :style="styleConfig('c')"></div><div :style="styleConfig('d')"></div><div class="num">{{num}}</div></div> </template><script> // 假如以下就是后端返回的數(shù)據(jù)//菜單列表 let dataList = [],chilrenList = []; for (let i = 0; i < 20; i++) {dataList.push({name: `父級菜單${i}`,id:`a${i}`});chilrenList.push({name: `子級菜單${i}`,id:`b${i}`});dataList[i].chilren = chilrenList; } // 動態(tài)設置的樣式 let config = {navConfig: {color: "#333333",hoverColor: "#e6e6e6",bgColor: "#ffffff",hoverBgColor: "#d3d3d3",childColor: "#333333",childHoverColor: "#e6e6e6",childBgColor: "#ffffff",childHoverBgColor: "#d3d3d3"},config1: {},config2: {}//... 可能還有會有很多個配置 }; export default {data() {return {num: 1,navList: []};},mounted() {this.navList = dataList;// 通過一個定時器來觸發(fā)組件實時更新setInterval(() => {this.num++;}, 1000);},methods: {//傳入不同的key來返回不同的樣式styleConfig(key) {console.log("abc");if (key === "nav") {return {color: config.navConfig.color,backGroundColor: config.navConfig.bgColor};} else if (key === "navChild") {return {color: config.navConfig.childColor,backGroundColor: config.navConfig.childBgColor};} else {return {width: "15px"};}}} }; </script>

可以看到我通過一個定時器來觸發(fā)組件更新, 菜單的動態(tài)樣式直接綁定一個函數(shù)返回,每當觸發(fā)更新時函數(shù)就會執(zhí)行20+20+2=42次,接下來可以看到:

明明可以只需要在第一次渲染時執(zhí)行4次,結果導致了每次更新都會執(zhí)行42次,這樣必會造成內存的損耗;

稍微改寫一下:

<template><div><div v-for="item in navList" :style="config.nav" :key="item.id">導航父級菜單<div v-for="item2 in item.chilren" :key="item2.id" :style="config.navChild">子菜單</div></div><div :style="config.c"></div><div :style="config.d"></div><div class="num">{{num}}</div></div> </template><script> export default {data() {return {num: 1,navList: [],config:{nav:'',navChild:'',c:'',d:'',}};},mounted() {this.navList = dataList;let attr=Object.keys(this.config)attr.forEach(key=>{this.config[key]=this.styleConfig(key)})setInterval(() => {this.num++;}, 1000);},methods: {//傳入不同的key來返回不同的樣式styleConfig(key) {console.log("abc");if (key === "nav") {return {color: config.navConfig.color,backGroundColor: config.navConfig.bgColor};} else if (key === "navChild") {return {color: config.navConfig.childColor,backGroundColor: config.navConfig.childBgColor};} else {return {width: "15px"};}}} }; }; </script>

在data中定義一個config,對應的屬性來保存動態(tài)樣式,把屬性名當做之前的條件key 傳給函數(shù),循環(huán)拿到對應的值,把用綁定依賴的函數(shù)替換成config的屬性

可以看到函數(shù)只會在第一次渲染時調用,更新時不再調用:

所以老老實實用data中聲明的變量來綁定依賴,不要用函數(shù)

總結

以上是生活随笔為你收集整理的vue 中watch函数名_vue中避免使用函数来绑定依赖的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。