当前位置: 首页 > news >正文

Vue keep-alive

keep-alive 的主要作用就是 缓存组件的状态,避免在组件切换时 销毁和重建组件实例。它的工作原理是 在切换组件时,组件实例被缓存,而不是销毁,直到该组件被移除或不再需要时才会销毁。

keep-alive 的作用:

  • 缓存组件的状态:例如用户输入的数据、滚动位置、页面显示的内容等,都会被保留下来。你切换到其他组件,再切换回来时,这些状态都会被恢复,而不会丢失。
  • 提高性能:由于不需要每次切换时重新创建组件,避免了重复渲染带来的性能开销

keep-alive 是 Vue 提供的一个内置组件,主要用于缓存 组件实例,避免组件被切换时重新渲染,从而提高性能。它常用的场景和功能如下:

常见场景

  1. 页面缓存

    • 场景:在单页面应用(SPA)中,切换不同页面时,缓存页面状态,避免每次切换都重新加载和渲染。
    • 功能:当用户在不同页面间切换时,页面的状态(如滚动位置、输入框内容、表单数据等)可以被缓存,避免丢失。

    例子:电商网站的商品浏览页,当用户从商品页切换到购物车页面,再切换回来时,商品页的滚动位置和过滤条件可以被保留。

    <keep-alive><ProductList v-if="showProductList" />
    </keep-alive>
    
  2. 表单数据保持

    • 场景:当用户在表单中输入数据时,切换到其他页面后返回,避免数据丢失。
    • 功能:缓存表单数据,避免每次切换页面时都清空表单。

    例子:一个多步骤的表单,用户填写完第一个步骤后切换到其他页面,再返回时,之前的填写内容不丢失。

    <keep-alive><MultiStepForm v-if="showForm" />
    </keep-alive>
    
  3. 滚动位置保持

    • 场景:当用户滚动页面时,切换组件或页面,再次显示时,恢复滚动位置。
    • 功能:缓存滚动位置,避免用户每次返回页面时都需要重新滚动。

    例子:当用户浏览一个长列表时,切换到其他页面再切换回来,列表的滚动位置会被保留。

  4. 动态组件切换

    • 场景:根据不同条件切换多个组件时,使用 keep-alive 来缓存这些组件,避免它们重新加载和销毁。
    • 功能:可以在多个组件间切换时,避免重复的创建和销毁操作,提升用户体验。

    例子:一个后台管理系统中,根据用户选择切换不同的管理模块(例如:用户管理、订单管理),每个模块的页面状态和数据都可以被缓存。

    <keep-alive><component :is="currentComponent" />
    </keep-alive>
    
  5. 条件性缓存

    • 场景:只缓存某些组件,而不缓存其他不需要缓存的组件。
    • 功能:使用 excludeinclude 属性,动态控制哪些组件需要缓存,哪些不需要。

    例子:在一个大型的单页面应用中,某些页面或组件需要缓存,而其他临时页面则不需要缓存。

    <keep-alive :exclude="['TemporaryComponent']"><ComponentToCache />
    </keep-alive>
    
  6. 分页或列表状态保持

    • 场景:在分页列表组件中,当用户翻页时,切换到其他页面后再回来时,保持分页的状态(例如:当前页码、筛选条件等)。
    • 功能:缓存分页信息,避免每次重新加载数据。

    例子:在一个带分页的商品列表中,用户选择了某页,然后切换到其他页面,返回时会自动恢复到之前的页码和筛选条件。

常用功能和用法

  1. includeexclude 属性

    • include:指定需要缓存的组件。
    • exclude:指定不需要缓存的组件。
    <keep-alive :include="['ComponentA', 'ComponentB']"><component :is="currentComponent" />
    </keep-alive>
    
  2. max 属性

    • max:最大缓存数量。缓存的组件实例达到最大值时,会按 先入先出(FIFO) 的方式移除最旧的组件实例。
    <keep-alive :max="5"><ComponentA />
    </keep-alive>
    
  3. activateddeactivated 生命周期钩子

    • activated:组件从缓存中激活时触发。
    • deactivated:组件被缓存时触发(即被隐藏)。

    这两个钩子通常用于执行在组件激活和停用时的某些操作。

    <script>
    export default {activated() {console.log('Component is activated');},deactivated() {console.log('Component is deactivated');}
    };
    </script>
    
  4. key 属性

    • key:当 keep-alive 缓存多个相同组件时,key 可以用于区分这些组件。每个组件的 key 是唯一的,决定了组件的缓存。
    <keep-alive><component :is="currentComponent" :key="componentKey" />
    </keep-alive>
    

    在切换时,如果 key 不同,keep-alive 会将组件视为不同的实例,重新缓存它们。

总结

keep-alive 在 Vue 中有很多常见的使用场景,它主要用于:

  • 缓存组件状态,避免每次切换组件时重新渲染。
  • 优化性能,尤其是对于需要频繁切换和展示的组件,避免重复创建和销毁。
  • 保持滚动位置、表单数据等,改善用户体验。

通过合理地使用 keep-alive,你可以显著提高 Vue 应用的性能,尤其是对于复杂的单页应用(SPA)。

http://www.dtcms.com/a/445806.html

相关文章:

  • Vue中的hash模式和history模式
  • 微信网站 影楼电商网站开发代码
  • 如何更改PPT的比例大小
  • 【MediaMTX】centos 7 安装MediaMTX
  • 网站开发中 即将上线哈尔滨市建设厅网站
  • linux部署docker(国内镜像)
  • 深入理解HarmonyOS ArkTS语法:从组件化到状态管理
  • 东莞网站制作十强python培训费用大概多少
  • 网站嵌入视频代码郑州短视频运营公司
  • 【Linux】安装配置mysql中出现的问题1
  • CMU15445(2023fall) Project #1 - Buffer Pool Manager优化分析
  • Vue 基础(实战模板与命名指南)
  • 葫芦岛建设信息网站营销专业就业前景
  • 保定网站推广哪家好专业团队张伟图片
  • leetcode 1219 黄金矿工
  • 【Camera】MTK平台的一些基础认识(待补充)
  • Go基础:用Go语言操作MySQL详解
  • 数字短链接生成郑州seo优化
  • 网站排版尺寸安装好的字体怎么用wordpress
  • 如何利用企业微信SCRM打造精准客户营销策略?
  • AI 编程 Trae 如何去 AI 味(以用户管理系统为例子)
  • 【National Treasure2】
  • 【LLM4EDA】: Part 9--LLM4EDA的优化与建模
  • 用parser_tools插件来解析SQL语句
  • 湖北住房和城乡建设厅网站phpmysql做网站
  • 《量子计算》学习笔记:量子计算的基本定义(续)
  • 哈尔滨网站建设价位上海有名的猎头公司
  • 手写MyBatis第94弹:完整架构回顾与核心技术深度解析
  • 汽车电子Autosar架构BSW层学习路线·附录章节
  • 织梦 网站设计做网站竟然不知道cms