別再用this.$forceUpdate()了!—性能優化篇

文章目錄

    • 別再用this.$forceUpdate()了!—性能優化篇
        • 🎈介紹
        • 🧨弊端
          • 注意事項
        • 🎆解決實例

別再用this.$forceUpdate()了!—性能優化篇

起因是接手公司之前外包的項目做項目優化,代碼看著一言難盡,然后看代碼時,發現了這個api:this.$forceUpdate(),這是什么?

🎈介紹

這里官網介紹很簡單,

vm.$forceUpdate()
示例:
迫使 Vue 實例重新渲染。注意它僅僅影響實例本身和插入插槽內容的子組件,而不是所有子組件。

還有一段介紹,但是是用于強制更新這一方法的

如果你發現你自己需要在 Vue 中做一次強制更新,99.9% 的情況,是你在某個地方做錯了事。

你可能還沒有留意到數組或對象的變更檢測注意事項,或者你可能依賴了一個未被 Vue 的響應式系統追蹤的狀態。

然而,如果你已經做到了上述的事項仍然發現在極少數的情況下需要手動強制更新,那么你可以通過 $forceUpdate來做這件事。

就是說這個方法是用來強制更新的!但是官網說你很可能是你的問題,你哪個地方做錯了!

🧨弊端

$forceUpdate()會迫使 Vue 實例重新渲染,所以就會有一個問題,那就是重新渲染dom,造成性能壓力,而且繞過了vue的正常響應式系統,就拋棄了響應式了,那就有點因噎廢食了。

注意事項

$forceUpdate()會觸發beforeUpdateupdated生命周期

$forceUpdate()只會影響實例本身和插入插槽內容的子組件

🎆解決實例

項目原先代碼中,先進行遍歷catchs數組中,修改每個對象中的active屬性,隨后進行更改為false,然后再傳參進來的值對應的active值修改為true,原來的兄弟可能看,數據變了怎么不更新啊,沒有排查出問題,直接全部重新渲染,真是簡單痛快呀。

thisCatch(index) {this.catchs.forEach((element,index) => {element.active = false})this.catchs[index].active = truethis.$forceUpdate()},

那就輪到我優化了,首先發現一個點是catchs數組中對象對應的值沒有active這個屬性,而vue2中響應式就有一個缺陷就是新增屬性沒有響應式。

所以到這就是兩個方法,給默認值或者添加值讓它有響應式

默認值好理解,實現響應式其實也挺簡單就是使用$set

thisCatch(index) {this.catchs.forEach((element,index) => {this.$set(this.days[index], 'active', false);})this.$set(this.days[index], 'active', true);},

很簡單就解決了問題,所以其實就正如官網說的😂

如果你發現你自己需要在 Vue 中做一次強制更新,99.9% 的情況,是你在某個地方做錯了事。

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

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

相關文章

CGI面試題及參考答案

什么是CGI?它在Web服務器與應用程序之間扮演什么角色? CGI(Common Gateway Interface) 是一種標準協議,它定義了Web服務器與運行在服務器上的外部程序(通常是腳本或應用程序)之間的通信方式。簡單來說,CGI充當了一個橋梁,使得Web服務器能夠將用戶的請求傳遞給后端程序…

ruoyi—cloud 新建模塊+生成代碼

1.復制一個模塊——修改名字 2.打開模塊下的yml文件,修改端口號和名字 (1)修改一個名字 (2)打開yml文件 (3)修改端口號,不要重復 (4)改名字和模塊一致 3.…

41、web基礎和http協議

web基礎與http協議 一、web web:就是我們所說得頁面,打開網頁展示得頁面。(全球廣域網,萬維網) world wide webwww 分布式圖形信息系統 http:超文本傳輸協議 https:加密的超文本傳輸協議…

貓凍干可以天天喂嗎?喂凍干前要了解的必入主食凍干榜單

近年來,凍干貓糧因其高品質而備受喜愛,吸引了無數貓主人的目光,對于像我這樣的養貓達人來說,早已嘗試并認可了凍干喂養。然而,對于初入養貓行列的新手們來說,可能會有疑問:什么是凍干貓糧&#…

Qt——界面優化

目錄 QSS 基本語法 QSS 設置方式 指定控件樣式設置 全局樣式設置 文件加載樣式表 Qt Designer 編輯樣式 選擇器 子控件選擇器 偽類選擇器 樣式屬性 盒模型 控件樣式 按鈕 復選框 單選框 輸入框 列表 菜單欄 登錄界面 繪圖 概念 繪制形狀 繪制線段 繪制…

微信換手機號了怎么綁定新手機號?

微信換手機號了怎么綁定新手機號? 1、在手機上找到并打開微信; 2、打開微信后,點擊底部我的,并進入微信設置; 3、在微信設置賬號與安全內,找到手機號并點擊進入; 4、選擇更換手機號&#xff0c…

【代碼隨想錄算法訓練Day52】LeetCode 647. 回文子串、LeetCode 516.最長回文子串

Day51 動態規劃第十三天 LeetCode 647. 回文子串 dp數組的含義:i到j的子串是否是回文的,是的話dp[i][j]1 遞推公式:if(s[i]s[j]) i j 一個元素 是回文的 |i-j|1 兩個元素 是回文的 j-i>1 判斷dp[i1][j-1] 初始化:全部初始化成…

在代理服務器環境中配置pip源的全面指南

引言 Python的包管理工具pip是開發者和系統管理員常用的工具之一,用于安裝和管理Python庫。然而,在某些網絡環境下,如公司內網或某些國家,直接訪問pip默認源可能會受到限制。此外,通過代理服務器訪問可以提高訪問速度…

淘系-萬相臺無界實操運營課:淘系 付費工具課(40節課)

課程目錄 01_萬相臺無界系統性忖費推廣思維.mp4 02_萬相臺無界七大推廣場景詳解.mp4 03關鍵詞推廣計劃之標準計劃搭建技巧.mp4 04_關鍵詞推廣之智能計劃推廣技巧.mp4 05_關鍵詞推廣之趨勢選品計劃推廣技巧.mp4 06關鍵詞推廣之智能選品計劃推廣技巧.mp4 07_非標品的關鍵詞…

MacOS升級指定Python版本的pip

場景: 系統默認是Python2.7,已經通過brew install python3.11 python3.12安裝了多個版本的Python 執行:pip --version pip 24.1 from /Users/mac10.12/Library/Python/3.11/lib/python/site-packages/pip (python 3.11) 用的是Python3.11…

待辦工作如何在桌面分區顯示

在現代快節奏的工作環境中,我們每天都要處理大量的待辦事項。面對這些繁多的事項,很多人常常感到無從下手,導致工作任務堆積,影響工作效率。那么,如何在繁雜的事項中保持清晰,讓工作更有條理呢?…

旋轉變壓器軟件解碼simulink仿真

1.介紹 旋轉變壓器是一種精密的位置、速度檢測裝置,尤其適用于高溫、嚴寒、潮濕、高速、振動等環境惡劣、旋轉編碼器無法正常工作的場合。旋轉變壓器在使用時并不能直接提供角度或位置信息,需要特殊的激勵信號和解調、計算措施,才能將旋轉變壓…

每隔一個小時gc一次的問題

原文地址https://www.cnblogs.com/jiangxinlingdu/p/7581064.html 設置一下這個 -XX:ExplicitGCInvokesConcurrent 或 -XXExplicitGCInvokesConcurrentAndUnloadsClasses 并且檢查一下,并下面的值設置變大 java.rmi.dgc.leaseValue sun.rmi.dgc.client.gcInterv…

EFCore_查詢延遲執行機制及基于此的動態SQL拼接

延遲機制簡述 對實體(DbSet)執行條件查詢后,對應的SQL未必生成、執行,通常在執行了終結方法SQL才會真正地生成并執行 var books dbContext.Books.Where(e > e.Price > 0); 題外話:EFCore的數據讀取策略是片段…

Hamster (CHO) PLBL2 ELISA Kit—倉鼠(CHO) PLBL2 ELISA試劑盒

宿主細胞蛋白(HCP)是生物制藥過程中產生的一類主要雜質,是重組疫苗及重組抗體類藥物的重要質控指標。雖然大部分HCP可以在早期的純化步驟中除去,但是仍有一些HCP會通過純化系統攜帶,可以躲過常規HCP ELISA檢測。ICL的H…

2024-07-01 ARM作業

串口通訊實驗 結果:沒完成 main.c #include "uart4.h" char Str; int main() {//串口通信初始化hal_uart_init();while(1){// hal_delayms(1000);// Str hal_get_char();// if(Str){// hal_put_char(Str1);// }}return 0; } uart4.c #include &quo…

Java 線程的生命周期管理

引言 線程是 Java 編程中重要的概念之一。通過多線程,程序可以同時執行多個任務,提高效率和響應能力。理解和管理線程的生命周期是編寫高效并發程序的關鍵。本文將詳細介紹 Java 線程的生命周期管理,并解釋幾種關鍵方法:start()、…

第7篇 智能合約是什么?——從產品經理視角看智能合約

引言 親愛的讀者們,歡迎大家來到我們的《區塊鏈常識:從小白到頂級行業專家》專欄的第7篇!今天,我們要揭開智能合約的神秘面紗。別擔心,這不是法律術語的堆砌,也不是代碼的迷宮,而是一個讓你在區塊鏈上實現奇妙想法的魔法工具。準備好了嗎?讓我們開始吧! 智能合約的定…

RedHat9 | podman容器-續集

一、管理容器存儲和網絡資源 使用容器來運行簡單的進程,然后退出。可以配置容連續運行特定服務,如數據庫服務。如果持續運行服務,需要向容器添加更多的資源,如持久存儲或對其他網絡的訪問權限。 針對企業容器平臺上的大型部署&a…

為Ubuntu-24.04-live-server-amd64磁盤擴容

系列文章目錄 Ubuntu-24.04-live-server-amd64安裝界面中文版 文章目錄 系列文章目錄前言一、檢查系統本身情況1.用 lsblk 命令查看自己系統磁盤是什么狀態2.用 df -h 命令查看文件系統的磁盤空間使用情況3.解決 Ubuntu-24.04 磁盤空間只能用一半的問題3-1擴展邏輯卷&#xff…