前端:keepAlive数据缓存组件及参数讲解和应用场景

概要

提示:往往我们在使用成熟的开源框架时,会发现有很多优秀的功能,值得我们思考,我们往往局限于常规应用,而忽略了技术本身切实的本质

例如:

简单的实例:当我们做一个标签页,自由切换页面,是如何实现的呢?你可能会说,不就是点击切换,这有什么难的呢?事实是这样吗?less talk show me code
答案:不是,当我们加载数据后,作为标签,来回切换(类似的菜单,我们点击某个菜单,在另一侧就该看到实时的内容),但是有时就是白屏。
话不多说,先来分析一下:
想一下
切换,我们首先会想到,可以用
v-if
v-show

切换按钮

<button @click=!flag”>切换按钮</button>
<exp-a v-if=“flag”></exp-a>
<exp-b v-else></exp-b>

不需要复现,当前切换组件时,页面重新渲染,v-if,v-else来切换,那么就会出现数据重新初始化。
但是如果你要是用v-show 就可以保留上一次输入的内容。
因为v-show是这些组件dom同时渲染到当前页面,而v-if是决定是否有这个dom。所以v-show不存在上述问题。只有v-if存在这个组件切换,修改后的数据切换变为初始化的问题。初始化后,就会白屏的问题。

但是有的同学很倔强,就是想用v-if,就不用v-show,认为v-show会拖累页面加载速度。可不可以?

再深入的思考一下
是不是还可以用缓存技术,就是把组件缓存起来,是可以的。
可以用 keep-alive组件,这个缓存功能的组件用起来也很简单就是,想缓存哪就把哪个组件包在里面即可。
简单的例子:

  <el-button type="primary" @click="flag = !flag">切换组件</el-button>
  <KeepAlive>
    <exp-a v-if="flag"></exp-a>
    <exp-b v-else></exp-b>
  </KeepAlive>

keepAlive有个特点,就是只能含有一个根组件,那么上述,用的v-if和v-else明显最终只有一个组件 a或b.
如果此时你用v-show ,那么此时就有两个child node ,a,b。这对于keepAlive是不允许。

  <el-button type="primary" 
  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值