详解关于Vue2.0路由开启keep-alive时需要注意的地方


Posted in Javascript onSeptember 18, 2018

Vue2.0 做应用必有的需求就是页面数据需要做缓存,不用每次进入页面都要把数据重新请求一遍,每次页面切换都有段等待数据相应时间,这个用户体验可想有多么蛋疼,所以页面缓存是必要的,啥时候需要更新页面数据呢?可以监听状态变化,或者是手动下拉刷新重新请求数据,酱紫,我想用户体验会做的更好。

keep-alive的作用以及好处

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

废话不多说直接上码,一般是在 src/App.vue 设置开启 keep-alive 实现页面数据缓存:

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

列举几个常用的 hook 方法,如下:

export default {
 data() {
  return {
  
  }
 },
 created: function() {
  console.log("the hook of created is done!");
 },
 mounted: function() {
  console.log("the hook of mounted is done!");
 },
 activated: function() {
  console.log("the hook of activated is done!");
 },
 deactivated: function() {
  console.log("the hook of deactivated is done!");
 }
}

首次进来 hook 的触发顺序 created-> mounted-> activated,退出时触发 deactivated:

// 控制台打印结果
the hook of created is done!
the hook of mounted is done!
the hook of activated is done!
the hook of deactivated is done!

二次进来 hook 只触发 activated,退出时触发 deactivated:

// 控制台打印结果
the hook of activated is done!
the hook of deactivated is done!

所以这就是为什么有些人开启 keep-alive 之后,created 和 mounted 注册的 pageInt 方法不触发的原因了,因为 keep-alive 把它们屏蔽了,也就是把数据缓存起来,所以不再请求。

如果你的某些页面一定要实时请求,你可以直接在 activated 这个 hook 做 pageInt,就不要在 created 和 mounted 上面注册 pageInt 方法了。

还有你可以选择性 pageInt,比如监听状态变化,包括但不限于监听路由的变化,某参数的变化,某时间节点的变化等等。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 学习之旅 (3)
Feb 05 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
Oct 29 Javascript
基于JavaScript 下namespace 功能的简单分析
Jul 05 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 Javascript
微信小程序 侧滑删除(左滑删除)
May 23 Javascript
JavaScript无操作后屏保功能的实现方法
Jul 04 Javascript
Vue+mui实现图片的本地缓存示例代码
May 24 Javascript
基于vue-router 多级路由redirect 重定向的问题
Sep 03 Javascript
20多个小事例带你重温ES10新特性(小结)
Sep 29 Javascript
JS实现灯泡开关特效
Mar 30 Javascript
JS深入学习之数组对象排序操作示例
May 01 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
Nov 12 Javascript
Vue中 key keep-alive的实现原理
Sep 18 #Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
Sep 18 #Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
Sep 18 #Javascript
vue服务端渲染添加缓存的方法
Sep 18 #Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 #Javascript
微信小程序开发之路由切换页面重定向问题
Sep 18 #Javascript
在小程序中使用canvas的方法示例
Sep 17 #Javascript
You might like
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
操作Oracle的php类
2006/10/09 PHP
PHP 面向对象 final类与final方法
2010/05/05 PHP
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
jQuery实现判断上传图片类型和大小的方法示例
2018/04/11 jQuery
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
删除目录下相同文件的python代码(逐级优化)
2012/05/25 Python
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
python对象及面向对象技术详解
2016/07/19 Python
用Python将动态GIF图片倒放播放的方法
2016/11/02 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
利群广告词
2014/03/20 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
河童之夏观后感
2015/06/11 职场文书
2015小学师德工作总结
2015/07/21 职场文书
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB