ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Vue】keep-alive组件和:is

2022-05-28 15:33:18  阅读:174  来源: 互联网

标签:Vue 钩子 alive keep 缓存 组件 页面


keep-alive是一个内置抽象组件:它自身不会渲染一个DOM元素,也不会出现在父组件链中;使用keep-alive
包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。

一、keep-alive 属性

  • include - (string | RegExp | Array)

    定义缓存白名单,名称匹配的组件会被缓存。

  • exclude - (string | RegExp | Array)

    定义缓存黑名单,名称匹配的组件都不会被缓存。

  • max - (number | string)

    最多可以缓存多少组件实例。超出部分移出内存储存其他数据。




二、与keep-alive 相关的两个生命周期钩子

在没有使用keep-alive的组件中,在路由切换或者回退的时候仍然会重新渲染页面,从而触发created,mounted等钩子函数,用户体验不好。

当组件在 keep-alive内被切换时,它的 created(mounted) 和 destroyed 生命周期钩子不会被调用,因为created(mounted)和destroyed 是只执行一次的生命周期钩子。组件并没有被销毁所以不会重复调用,取而代之的是 activated 和 deactivated。(这会运用在 keep-alive 的直接子节点及其所有子孙节点。)

  1. 在keeplive中,activated钩子用来替代created钩子
  2. 在keeplive中,deactivated钩子用来替代destroyed钩子



三、使用场景

用户在某个列表页面选择筛选条件过滤出一份数据列表,由列表页面进入数据详情页面,再返回该列表页面,我
们希望:列表页面可以保留用户的筛选(或选中)状态。

keep-alive就是用来解决这种场景。当然keep-alive不仅仅是能够保存页面/组件的状态这么简单,它还可以
避免组件反复创建和渲染,有效提升系统性能。总的来说,keep-alive用于保存组件的渲染状态。


知识点 :is用法

有些 HTML 元素,诸如 <ul>、<ol>、<table><select>,对于哪些元素可以出现在其内部是有严格限制的。而有些元素,诸如 <li>、<tr> 和 <option>,只能出现在其它某些特定的元素内部。

使用:is可以进行转译,可以破除上述的限制。:is主要用于解决标签的嵌套规则,防止编译失败。

is:is的区别(:is可以理解v-bind,js公式)

  1. 可以使用is 直接传递一个组件
  2. 也可以使用:is 查找父组件中的一个赋值,然后找到相应的组件(for循环)

属性include的三种写法(exclude同理),字符串、正则、数组

<!-- 逗号分隔字符串 -->
<keep-alive include="a,b">
  <component :is="view"></component>
</keep-alive>

<!-- regex (使用 `v-bind`) -->
<keep-alive :include="/a|b/">
  <component :is="view"></component>
</keep-alive>

<!-- Array (使用 `v-bind`) -->
<keep-alive :include="['a', 'b']">
  <component :is="view"></component>
</keep-alive>

vue2中的写法

<!-- 在动态组件中使用 -->
<keep-alive :include="whiteList" :exclude="blackList" :max="amount">
     <component :is="currentComponent"></component>
</keep-alive>

<!-- 在vue-router中使用,keepalive直接套住组件 -->
<keep-alive :include="whiteList" :exclude="blackList" :max="amount">
    <router-view></router-view>
</keep-alive>

vue3中的写法

	<!-- keep-alive的vue3新写法 -->
    <router-view v-slot="{Component}">
      <keep-alive>
        <component :is="Component" />
      </keep-alive>
    </router-view>

标签:Vue,钩子,alive,keep,缓存,组件,页面
来源: https://www.cnblogs.com/wanglei1900/p/16320768.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有