别再用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.mzph.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…