vue中keep-alive、activated的探讨和使用「建议收藏」

vue中keep-alive、activated的探讨和使用「建议收藏」在修改公司的一个项目的时候发现了activated这个东西,一直觉得很疑惑,之前也没怎么用过啊!官网的生命周期那也没说过这东西啊!生命周期不就createmountupdate和destory这几个东东么,怎么多了个activate出来。百思不得其解,于是去问了下度娘和查了下文档!恍然大悟,原来这东东是结合keep-alive这东东使用的,下面顺便记录一下。 keep-ali………

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

在修改公司的一个项目的时候发现了activated这个东西,一直觉得很疑惑,之前也没怎么用过啊!官网的生命周期那也没说过这东西啊!生命周期不就create mount update 和destory这几个东东么,怎么多了个activate出来。
百思不得其解,于是去问了下度娘和查了下文档!恍然大悟,原来这东东是结合keep-alive这东东使用的,下面顺便记录一下。

 
顺便插个tip:富途2023届校招内推,需要内推的联系我哈!

keep-alive

<keep-alive>包裹动态组件的时候,会缓存不活动的组件实例,而不是摧毁他们。其是一个抽象的组件,自身不会渲染一个DOM元素,也不会出现在父组件链中。
说白了被<keep-alive>包裹的组件其会被缓存
废话不多说直接上例子.

我们现在创建两个子组件conpoment1,compoment2,其内容如下

<template>
  <div class="wrapper">
    <ul class="content"></ul>
    <button class="add" id="add" @click="add">添加子元素</button>
  </div>
</template>

<script>
export default { 
   
  data() { 
   
    return { 
   };
  },
  methods: { 
   
    add() { 
   
      let ul = document.getElementsByClassName("content")[0];  
      let li = document.createElement("li");
      li.innerHTML = "我是添加的元素";
      ul.appendChild(li);     
    }
  }
};
</script>
<style >
</style>

Jetbrains全家桶1年46,售后保障稳定

代码不用解释了吧,就是点击按钮在ul动态添加一个li元素。
接着我们在路由中注册一下,再回到APP.vue中修改一下配置

<template>
  <div id="app">
    <keep-alive>
      <router-view />
    </keep-alive>
</template>

这样我们就会发现,当我们切换路由的时候,我们之前添加的子元素还回保存在那里
在这里插入图片描述
如果是这样的话所有的页面都被缓存了,一些需要重新加载不需要缓存的我们可以通过v-for来实现。当然我们可以在路由中设置一个key值来判断组件是否需要缓存,就像下面这样

//index.js
{ 
   
      path: '/1',
      name: 'components1',
      component: Components1,
      meta: { 
   
        keepAlive: true   //判断是否缓存
      }
    },
    { 
   
      path: '/2',
      name: 'components2',
      component: Components2,
      meta: { 
   
         keepAlive: false
      }
    },

然后我们的App.vue中只需要判断其keepAlive值即可

  <div id="app">
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive" />
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive" />
</template>

这时候我们回到页面中添加子元素并切换路由就会发现只有components1中的组件有缓存。

 

activated

先说下这个生命周期钩子,官网说其是在服务器端渲染期间不被调用,
说白了其就是在挂载后和更新前被调用的。但如果该组件中没有使用缓存,也就是没有被<keep-alive>包裹的话,activated是不起作用的。我们直接来试一下就知道了。

//components1中
  created() { 
   
    console.log("1激活created钩子函数");
  },
  activated() { 
   
    console.log("1激活activated钩子函数");
  },
  mounted() { 
   
    console.log("1激活mounted钩子函数");
  }

//components2中
  created() { 
   
    console.log("2激活created钩子函数");
  },
  activated() { 
   
    console.log("2激活activated钩子函数");
  },
  mounted() { 
   
    console.log("2激活mounted钩子函数");
  }

我们在2个组件中分别打印出其钩子函数执行情况。我们可以看到

在这里插入图片描述
在执行components1时候其是执行了activated钩子函数的,而components2则没有,因为components2并没有被<keep-alive>包裹,所以其并不会激活该钩子函数。

当我们再切换一次路由的时候又发现了神奇的地方
在这里插入图片描述
组件1中只执行activated钩子钩子函数,而组件2则把创建和挂载的钩子函数都执行了。
这就是缓存的原因,components其对组件进行了缓存所以并不会再一次执行创建和挂载。

简单的说activated()函数就是一个页面激活后的钩子函数,一进入页面就触发;

所以当我们运用了组件缓存时,如果想每次切换都发送一次请求的话,需要把请求函数写在activated中,而写在created或mounted中其只会在首次加载该组件的时候起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198384.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sql注入orderby子句的功能_sql group by order by一起用

    sql注入orderby子句的功能_sql group by order by一起用uniqueidentifier全局唯一标识符(GUID)。注释uniqueidentifier数据类型的列或局部变量可用两种方法初始化为一个值:使用NEWID函数。将字符串常量转换为如下形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中

    2022年9月8日
    0
  • java是面向对象还是面向过程_面向对象和面向过程最本质的区别是什么?

    java是面向对象还是面向过程_面向对象和面向过程最本质的区别是什么?面向对象和面向过程最本质的区别在于考虑问题的出发点不同,面向过程是以事件流程为考虑问题的出发点,而面向对象则是以参与事件的角色(对象)为考虑问题的出发点,所以面向对象在处理问题时更加灵活。目前,面向过程的语言更多被用于处理底层业务,而面向对象编程则更多用于实现一些业务逻辑复杂的大型系统。从结构上来说,面向过程的特点是模块化和流程化,而面向对象的特点是封装、继承和多态,这里面就有本质的区别了。面向过…

    2022年7月7日
    14
  • 抓包工具Charles使用教程

    抓包工具Charles使用教程文章目录一、什么是Charles?二、下载安装:三、http抓包:一、什么是Charles?Charles,因产品Icon为青花瓷造型,俗称青花瓷。主要是用来抓取网络流量包,可以分析产生的网络请求、可以配置代理来抓取手机流量包数据。二、下载安装:1、官方渠道,收费版;2、安装破解版,百度网盘地址:https://pan.baidu.com/s/1_ApnyPqoN5EQ6JvHMjnCTQ三、http抓包:1、开始代理配置:目录:Proxy-ProxySettings2、查看电

    2022年5月7日
    51
  • C语言发送email

    C语言发送email   应用:分布式评测系统中检测到连接断开后向管理员发送邮件。 一、认证方式  ESMTP(ExtensionSMTP)即认证的邮件传输方式,是邮件服务器系统为了限制非本系统的正式用户利用本系统散发垃圾邮件或其他不当行为而开设的一项安全认证服务。它与传统的SMTP方式相比,主要的不同有两点:  1)支持8-bitMIME格式的编码。  2)支持用户身份的验证。  多了一道用

    2022年6月11日
    44
  • 自然语言处理简介(1)—- 服务梳理与传统汉语分词

    1.Nlp技术体系简介1.1基础技术1.2Nlp核心技术1.3NlP+(高端技术)2.知名NLP服务系统简介2.1汉语分词系统ICTCLAS2.2哈工大语言云(LanguageTechnologyPlatform,LTP)2.3AmazonComprehend2.4阿里云NLP2.5腾讯云NLP2.6百度语言处理基础技术2.6.1功能丰富且…

    2022年4月8日
    49
  • nactive for mysql 15 激活码【在线破解激活】

    nactive for mysql 15 激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号