首页 > 其他分享 >Vue — keep-alive详解

Vue — keep-alive详解

时间:2024-03-14 15:26:13浏览次数:31  
标签:缓存 console log deactivated Component alive keep Vue 组件

当使用 <keep-alive> 标签包裹组件时,Vue.js 会将这个组件缓存起来,而不是每次重新创建和销毁。这意味着组件的状态、数据和生命周期钩子函数都得以保留,以便在下次被激活时能够立即恢复到之前的状态。

<keep-alive> 的主要作用是优化组件的性能和用户体验,尤其适用于频繁切换或重复访问的组件。

<keep-alive> 的关键特性:

  1. 缓存组件:<keep-alive> 会缓存被包裹的组件实例,以避免多次创建和销毁。这样可以节省性能开销,并提高页面响应速度。

  2. 生命周期钩子函数:被缓存的组件在切换时,生命周期钩子函数不会再触发 createddestroyed,而是触发 activateddeactivated 钩子函数。这使得可以在组件激活时执行特定操作,而无需重新初始化整个组件。

  3. 缓存策略:<keep-alive> 可以设置不同的缓存策略,以控制哪些组件需要缓存以及如何进行缓存。常见的缓存策略包括 includeexcludemax

    • include:指定需要缓存的组件名称或正则表达式。
    • exclude:指定不需要缓存的组件名称或正则表达式。
    • max:指定最多同时缓存的组件数量。
  4. 动态缓存:可以通过使用动态组件和 <keep-alive>include 属性来实现根据条件动态缓存组件。

<template>
  <div>
    <button @click="toggleComponent">Toggle Component</button>

    <keep-alive>
      <component :is="currentComponent"></component>
    </keep-alive>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentComponent: 'ComponentA'
    };
  },
  methods: {
    toggleComponent() {
      this.currentComponent = this.currentComponent === 'ComponentA' ? 'ComponentB' : 'ComponentA';
    }
  },
  components: {
    ComponentA: {
      template: '<div>Component A</div>',
      created() {
        console.log('Component A created');
      },
      destroyed() {
        console.log('Component A destroyed');
      },
      activated() {
        console.log('Component A activated');
      },
      deactivated() {
        console.log('Component A deactivated');
      }
    },
    ComponentB: {
      template: '<div>Component B</div>',
      created() {
        console.log('Component B created');
      },
      destroyed() {
        console.log('Component B destroyed');
      },
      activated() {
        console.log('Component B activated');
      },
      deactivated() {
        console.log('Component B deactivated');
      }
    }
  }
};
</script>

标签:缓存,console,log,deactivated,Component,alive,keep,Vue,组件
From: https://www.cnblogs.com/qinlinkun/p/18072910

相关文章

  • 问题记录:Vue3的watch,如何做到在监听值没变化的情况下调用相关函数去请求接口?
    一般来说Vue的watch属性只在监听到值发生变化了,才会去执行相关代码。可是最近在做项目(Vue3+TS+Vite)的时候,遇到了这种情况:标题如图所示:Modal是在父组件里写的,Modal里的折线图是在子组件里写的。点击按钮后会获取到pid和vid的值传给子组件。子组件通过watch属......
  • Java登陆第三十五天——VUE初始页面解析
    Vite创建的默认Vue3项目中package.json文件信息如下:{"name":"vmoudle1","private":true,"version":"0.0.0","type":"module","scripts":{"dev":"vite",......
  • Vue项目常用总结
    常用插件模块分析插件安装以后,重新运行项目的时候,会自动打开项目分析页面安装npmi-Dwebpack-bundle-analyzervue.config.js配置const{defineConfig}=require("@vue/cli-service");constpath=require("path");//打包分析插件-----constBundleAnalyzerPlug......
  • 都2024年了还在写JQuery?一篇文章带你快速入门Vue.js
    Vue快速入门笔记本文主要介绍vue.js的核心知识点,看完本篇文章只能算是简单入门了解Vue,后续还需要读者在项目中不断练习研究。一、前端核心分析1.1、概述Soc原则:关注点分离原则Vue的核心库只关注视图层,方便与第三方库或既有项目整合。HTML+CSS+JS:视图:给用户......
  • Vue — vue中带有$的属性和方法
    在Vue.js中,以$开头的属性通常是框架内部提供的特殊属性或方法,用于访问Vue实例的一些内部属性或执行特定的操作。以下是一些常见的以$开头的属性:属性:1.$data:Vue实例的数据对象,包含实例中定义的数据。constapp=newVue({data:{message:'Hello,Vue!'}......
  • Java登陆第三十五天——Vite+Vue3目录结构、.vue文件理解(SFC)
    项目结构使用Vite创建Vue3+JS默认项目结构如下:(vmoudle1是项目名)Vue中提出了组件的概念。组件是代码复用的一种方式,用于抽象出一个可复用的UI,方便在不同的场景中进行重复使用。组件根据大小可被分为:(从小到大)1.组件2.布局组件3.页面级别组件.vscode忽略node......
  • vue的axios教程
    ajax技术:不重新加载整个页面的情况下,异步地与服务器进行通信,并更新页面的部分内容Ajax(AsynchronousJavaScriptandXML)是一种使用JavaScript向服务器发送和接收数据的技术。Ajax的工作原理基于以下关键组件:XMLHttpRequest对象:XMLHttpRequest是浏览器提供的API,用......
  • springboot3+vue3(十)springboot属性配置方式
    在项目中如端口号等配置信息在yml配置文件中,打包发布后这些信息运维人员无法进行修改的问题时有发生,如:改变项目运行的端口号等。我们除了在项目的yml配置文件中配置外,还有以下三种配置方法:1、命令行参数方式 --键=值    例如:我们想把项目的端口改为9999  --server.p......
  • vue中 lang="ts"与js的区别
    `lang="ts"`与`js`的区别在于指定了脚本语言的类型,其中:-`lang="ts"`指定了TypeScript,一种由微软开发的JavaScript的超集,提供了静态类型检查等功能,使得代码更加健壮和可维护。-`js`则指定了JavaScript,是一种脚本语言,用于在网页上实现动态交互效果,是前端开发中最常用......
  • Vue — 打包优化
    1.默认情况下,打包好的文件需要房子啊服务器的根目录下,如果希望能够双击运行,需要配置pacblicPath为相对路径const{defineConfig}=require('@vue/cli-service')module.exports=defineConfig({publicPath:'./',transpileDependencies:true})2.路由懒加载:当打......