学习笔记——keep-alive缓存组件,再次返回组件data数据重置

前言:使用keep-alive缓存组件,当再次返回该组件后,希望其组件中的数据或状态,保持上次离开该组件时的情况。


一、当前组件树

  

 

 希望缓存HomeMain组件的状态。

二、错误处理

我在HomeMain的祖先组件HomeLayout中,写了如下代码:

<template>
  <div class="home-layout">
    <home-header></home-header>
    <el-scrollbar style="height: calc(100% - 60px); width: 100%">
      <keep-alive :include="['homeMain']">
        <router-view />
      </keep-alive>
    </el-scrollbar>
  </div>
</template>

HomeMain组件中可以通过activated和deactivated等钩子函数判断HomeMain组件缓存了。但是当我点击跳转按钮进入ComponentLayout组件后,再次返回HomeMain组件后,其中data中的数据被重置了。

三、分析原因

如上图三张组件树所述,HomeLayoutComponentLayout组件是同级组件,HomeMain组件是HomeLayout的子组件。在没有组件缓存的情况下,HomeLayoutComponentLayout组件只能显示其中一个。所以当我们跳转到ComponentLayout组件后,再次返回HomeLayout组件,相当于重重新缓存了HomeMain组件,上一次的缓存结果被替换了。所以HomeMain组件中的数据一直保持初始化的状态。

四、解决方案

HomeLayoutComponentLayout组件的共同父组件中使用keep-alive组件:

<template>
  <div id="app">
    <keep-alive :include="['homeLayout']">
      <router-view />
    </keep-alive>
  </div>
</template>

五、总结

排查问题时,应该多多借助一些方便的工具,如:浏览器的控制台。

我排查问题的思路:1.首先在目标组件HomeMain中使用activated和deactivated等钩子函数,在函数中随便console.log点内容,控制台看看是否有输出。有:说明keep-alive没有写错。没有:就去找keep-alive的问题。2.通过chrome中的扩展程序Vue.js devtools,清晰直观的观察组件树,和组件的数据变化。点击切换组件时,发现HomeMain组件及其祖先组件没有被缓存。找到原因了,开始调整keep-alive组件位置,解决问题。找这类问题还有点麻烦,需要有点耐心。还需要多多努力敲代码,丰富自己的知识,提高自己解决业务的能力。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一一GG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值