首页 > 其他分享 >[Vue] v-once、v-memo 和 key 优化组件性能

[Vue] v-once、v-memo 和 key 优化组件性能

时间:2024-09-14 17:03:39浏览次数:1  
标签:Vue 渲染 memo key 组件 once

前言

keyv-oncev-memo 都是 Vue 提供的用于优化性能的工具,主要目的是减少不必要的渲染和更新操作,从而提升应用的性能。

key 相关的就不用多说了,[Vue] v-for key 用 index 会出现什么问题

v-once

这个很简单,仅渲染元素和组件一次,并跳过之后的更新。在随后的重新渲染,元素/组件及其所有子项将被当作静态内容并跳过渲染。

如果要更精细一点的就需要用 v-memo

<!-- 单个元素 -->
<span v-once>This will never change: {{msg}}</span>
<!-- 带有子元素的元素 -->
<div v-once>
  <h1>Comment</h1>
  <p>{{msg}}</p>
</div>
<!-- 组件 -->
<MyComponent v-once :comment="msg" />
<!-- `v-for` 指令 -->
<ul>
  <li v-for="i in list" v-once>{{i}}</li>
</ul>

v-memo

相比 v-oncev-memo 可以传递一组依赖,依赖变化时更新对应的组件和子组件。

<div v-for="item in list" :key="item.id" v-memo="[item.id === selected]">
  <p>ID: {{ item.id }} - selected: {{ item.id === selected }}</p>
  <p>...more child nodes</p>
</div>

标签:Vue,渲染,memo,key,组件,once
From: https://www.cnblogs.com/Himmelbleu/p/18414353

相关文章

  • Vue3 结合 Cesium 动态绘制矩形
    相关概念Viewer:newCesium.Viewer (container, options )介绍:用于构建应用程序的基本小部件。它将所有标准Cesium小部件组合到一个可重用的程序包中。Entity:newCesium.Entity ( options )介绍:实体实例将多种形式的可视化聚集到单个高级对象中。可以手动创建它们......
  • SpringBoot+Vue3项目邮箱验证码注册详细教程
    引言该篇文章是以SpringBoot+Vue3技术栈搭建的项目的邮箱注册登录流程,注册用户使用邮箱校验,使用qq邮箱发送验证码,并且把验证码存入Redis以备校验使用的详细介绍干货部分1.在SpringBoot项目的application.yaml文件中配置qq邮箱spring:#mail邮箱mail:#SMTP......
  • vue实现点击任意位置关闭侧滑显示
    需求:点击el-table列表展示侧滑框,再次点击列表中不同数据,刷新侧滑框中数据;点击外部任意位置关闭侧滑框思路:给整个页面加点击事件click,通过target判断点击的外层元素以及点击的位置,执行关闭侧滑框方法代码:mounted中监听click事件mounted(){letdoc=$("#app").get(0);......
  • vue2制作高复用页面
        记录一下页面搭建记录,利用vue2组件化开发的思想。这个页面适合于大部分信息管理系统~。模板固定,每次使用,直接修改表单表格参数,api接口等。     以上图页面为例,一个基础数据信息页面可以分为,分类(左侧),数据信息(右侧),搜索表单(右上),数据表格(右下),新增或编辑表......
  • vue2 antv x6 入门 (一)画布、节点、边
    安装#npmnpminstall@antv/x6--save#yarnyarnadd@antv/x6 1.初始化画布<divid="container"></div>import{Graph}from'@antv/x6'constgraph=newGraph({container:document.getElementById('container'......
  • Vue3中组件通信的几种方式
    Vue3组件通信和Vue2的区别:移出事件总线,使用mitt代替。vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所有的东西,合并到$attrs中了。$children被砍掉了。【1】props概述:props是使用频率最高的一种通信方式,常用与:父↔子。若父传子:属性值是非函数。若子传父:属性......
  • Vue3中Pinia存储和修改数据应用实践
    安装pinia:npminstallpiniamain.ts中使用pinia://引入createApp用于创建应用import{createApp}from'vue'//引入App根组件importAppfrom'./App.vue'//引入路由器importrouterfrom'./router'//创建一个应用constapp=createApp(App)//使用路由器app.use......
  • Vue3中路由传参的几种方式实践
    【1】RouterLink+query父组件脚本如下:<scriptsetuplang="ts"name="News">import{reactive}from'vue'import{RouterView,RouterLink}from'vue-router'constnewsList=reactive([{id:'asfdtrfay01',......
  • Vue2/Vue3中编程式路由导航实践总结
    【1】Vue2编程式路由导航①router.push除了使用<router-link>创建a标签来定义导航链接,我们还可以借助router的实例方法,通过编写代码来实现。router.push(location,onComplete?,onAbort?)注意:在Vue实例内部,你可以通过$router访问路由实例。因此你可以调用this.$router......
  • vscode下vue3+vite+ts+eslint项目配置
    一、创建项目pnpmcreatevue@latest注意:是否引入ESLint用于代码质量检测?选择否二、安装依赖pnpmi-Deslint@antfu/eslint-config三、在项目根目录创建文件:eslint.config.js//eslint.config.jsimportantfufrom'@antfu/eslint-config'exportdefaultantfu({......