详解关于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表单验证代码
Aug 02 Javascript
JavaScript中的ubound函数使用实例
Nov 04 Javascript
jQuery实现行文字链接提示效果的方法
Mar 10 Javascript
深入理解$.each和$(selector).each
May 15 Javascript
JQuery点击行tr实现checkBox选中的简单实例
May 26 Javascript
js中用cssText设置css样式的简单方法
Sep 19 Javascript
学习vue.js条件渲染
Dec 03 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
Dec 18 Javascript
React简单介绍
May 24 Javascript
requireJS模块化实现返回顶部功能的方法详解
Oct 16 Javascript
js实现上传并压缩图片效果
Jan 10 Javascript
开源一个微信小程序仪表盘组件过程解析
Jul 30 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
PHP脚本数据库功能详解(上)
2006/10/09 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
PDO::commit讲解
2019/01/27 PHP
jQuery each()小议
2010/03/18 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
javascript读取Xml文件做一个二级联动菜单示例
2014/03/17 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
英国女士家居服网站:hush
2017/08/09 全球购物
金融学专科生自我鉴定
2014/02/21 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
软件项目开发计划书
2014/05/01 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
淘宝好评语句大全
2014/12/31 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python