谈谈你对 keep-alive 的了解?

摘要:
在电子商务相关项目中,当我们第一次进入列表页面时,我们需要请求数据。当我从列表页面进入详细信息页面时,我们需要在不缓存详细信息页面的情况下请求数据,然后返回列表页面。此时,我们使用keep-alive缓存组件以防止二次渲染,这将大大节省性能。deactivated:当当前组件失去焦点时触发--缓存名称为test keep alive的组件--˃˂!

在做电商有关的项目中,当我们第一次进入列表页需要请求一下数据,当我从列表页进入详情页,详情页不缓存也需要请求下数据,然后返回列表页,这时候我们使用keep-alive来缓存组件,防止二次渲染,这样会大大的节省性能。

keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,避免重新渲染 ,其有以下特性:

  • 一般结合路由和动态组件一起使用,用于缓存组件;
  • 提供 include 和 exclude 属性,两者都支持字符串或正则表达式, include 表示只有名称匹配的组件会被缓存,exclude 表示任何名称匹配的组件都不会被缓存 ,其中 exclude 的优先级比 include 高;
  • 对应两个钩子函数 activated 和 deactivated ,当组件被激活时,触发钩子函数 activated,当组件被移除时,触发钩子函数 deactivated。

 1.通常用来包裹组件使用,本身没有意义,不会产生任何可视的元素,与component一起使用

<keep-alive>
    <component :is="view"></component>
</keep-alive>

2.在包裹组件时可以默认缓存组件,所谓缓存组件是指组件会保持一个状态不变,而不会在切换时重新挂载渲染

3.props: [include, exclude, max]

  • include:  指定缓存的组件,其中指定的是组件的name
  • exclude: 指定不缓存某个组件,其中指定的是组件的name
  • max:      指定最多缓存多少组件,达到最大值的时候会把最开始缓存的替换掉

4.上面缓存可以结合路由来缓存页面

<keep-alive>
    <router-view></router-view>
</keep-alive>

5.在keep-alive包裹下的组件可能会有两个钩子函数被触发

activated:       当前组件处于焦点状态时会触发当前钩子,被缓存的组件可以用此来替代mounted(组件不会重新挂载)。

deactivated:   当前组件失去焦点状态时触发。

实例:

<keep-alive include="test-keep-alive">
  <!-- 将缓存name为test-keep-alive的组件 -->
  <component></component>
</keep-alive>

<keep-alive include="a,b">
  <!-- 将缓存name为a或者b的组件,结合动态组件使用 -->
  <component :is="view"></component>
</keep-alive>

<!-- 使用正则表达式,需使用v-bind -->
<keep-alive :include="/a|b/">
  <component :is="view"></component>
</keep-alive>

<!-- 动态判断 -->
<keep-alive :include="includedComponents">
  <router-view></router-view>
</keep-alive>

<keep-alive exclude="test-keep-alive">
  <!-- 将不缓存name为test-keep-alive的组件 -->
  <component></component>
</keep-alive>

结合router,缓存部分页面

使用$route.meta的keepAlive属性:

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

需要在router中设置router的元信息meta:

//...router.js
export default new Router({
  routes: [
    {
      path: '/',
      name: 'Hello',
      component: Hello,
      meta: {
        keepAlive: false // 不需要缓存
      }
    },
    {
      path: '/page1',
      name: 'Page1',
      component: Page1,
      meta: {
        keepAlive: true // 需要被缓存
      }
    }
  ]
})
  • keep-alive用法

  • <keep-alive>包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们
  • <keep-alive>是一个抽象组件:它自身不会渲染一个DOM元素,也不会出现在父组件链中
  • 当组件在<keep-alive>内被切换,它的activateddeactivated这两个生命周期钩子函数将会被对应执行

免责声明:文章转载自《谈谈你对 keep-alive 的了解?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java和.NET下socket转换错误记录hive sql 窗口函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

dll相关(二)

1、如何制作dll? 使用vs2012,新建控制台应用程序,在类型中选择DLL即可。 在工程中添加.h文件和.cpp文件,如MathFuncsDLL.h和MathFuncsDll.cpp,这里展示一个类和一个函数,代码如下: 1 // MathFuncsDll.h 2 3 #ifdef MATHFUNCSDLL_EXPORTS 4 #define...

用Python给Github的README.md做一个访客统计功能

README.md 是每一个 Github 项目必不可少的文件,用户打开你的项目链接第一眼看到的就是它。如果可以给这个文件添加一个访客统计功能,那么不就知道每天有多少个用户或者一共有多少个用户打开过你的项目了吗? 答案是肯定的,但是因为普通的访客统计系统都需要在 HTML 页面中用 <script> 标签引入一个 js 文件, 而 Githu...

ArcGIS切片技巧及注意事项三之高级工具应用

1 - 修改已经发布缓存服务的缓存级别 如上图所示,红箱子里有很多缓存管理的工具,这里我们要用的是里面的管理地图服务器缓存比例。 下图中,服务器输入本机,然后选择我们需要调整比例尺级别的服务,这个工具适用于我们的缓存已经发布,例如我们已经发布到500比例尺,现在我们想将缓存发布到200比例尺,这里我们追加一个200比例尺,然后在到我们服务缓存发布界面单独...

tinyhttp 安装和使用 (代码阅读前期准备)

系统:ubuntu14.04 知识准备: <计算机网路第五版>   (美)特南鲍姆   7.3节 万维网    一:下载安装包  tinyhttpd-0.1.0 .tar.gz 二:解压 tar -zxvf tinyhttpd-0.1.0 .tar.gz 三:安装 cd tinyhttpd-0.1.0 make 出现报错 /usr/inclu...

你可能不知道Windows系统下有一个UNIX子系统

作者:朱金灿 来源:hhttp://blog.csdn.net/clever101 请看下面一段代码: #include <time.h> #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <errno....

MyBatis(缓存机制)

缓存可以极大的提升查询效率。 MyBatis系统中默认定义两级缓存(一级缓存和二级缓存)。 一、两级缓存 1、一级缓存:(本地缓存):sqlSession级别的缓存。一级缓存是一直开启的;sqlSession级别的一个Map。   与数据库同一次会话期间查询到的数据会放在本地缓存中   以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库;...