vue使用keep-alive缓存组件,vue keep-alive作用

  vue使用keep-alive缓存组件,vue keep-alive作用

  本文主要介绍vue自定义keepalive组件的相关信息。keep-alive组件使用这两个属性includeexclude来传入组件名,以确认哪些可以被缓存。这篇文章给你做了非常详细的介绍,对你的学习或者工作有一定的参考价值。请有需要的朋友参考。

  

目录

   vue自定义keepalive组件为什么会出现这种情况?如何解决这个问题?问题已知如何解决?想法是“如何使用代码”。就是这样,另一个的全部意义。

  

vue自定义keepalive组件

  前阵子在vue项目中有一个实现多标签页功能的新需求。我本来想,这不是单纯的增加按钮重定向吗?当然,如果这么简单,我也不会写这篇文章。赶紧写出来,提交测试。测试兄弟很快提交了一个问题:“为什么你的两个标签页访问同一个链接,但它仍然是链接的?”。妈的,这绝对是缓存问题。

  

为什么会出现这种情况呢

  Keep-alive组件使用这两个属性(包括exclude)来传入组件名,以确认哪些组件可以被缓存。

  保持活动排除=a,b,c

  路由器视图/路由器视图

  /保持活力

  我们来看看源代码,看看大家是怎么实现的(这两张图真难看)

  主要逻辑(直接说上面的代码)是根据传入的include、exclude两个属性传入数组,根据当前访问的组件名称进行判断。对于同一个链接,我们都使用相同的名称访问同一个组件。当我们第二次访问它时,链接指向同一个组件。因为组件名作为缓存键,所以会被认为是缓存读取操作,然后直接加载渲染缓存。因此,两个选项卡页面访问同一个链接,从而产生链接。

  

如何解决这个问题呢

  这个比较简单,因为之前组件名是键,所以我们不用组件名作为键,而是用name页签的索引作为键。

  

问题知道了怎么解决呢

  

思路有了撸代码

  group-keep-alive.js

  函数remove(arr,item) {

  if(数组长度){

  var index=arr.indexOf(item)

  if (index -1) {

  返回排列拼接(索引,1)

  }

  }

  }

  函数getFirstComponentChild(children){

  if (Array.isArray(children)) {

  for(var I=0;I .儿童.长度;i ) {

  var c=儿童[i]

  if(isDef(c)(isDef(c . component options) isAsyncPlaceholder(c))){

  返回c

  }

  }

  }

  }

  函数isDef(v) {

  回v!==未定义的v!==空

  }

  函数isAsyncPlaceholder(节点){

  return node . is comment node . async factory

  }

  var pattern types=[字符串,正则表达式,数组]

  导出默认值{

  名称:保持活动,

  摘要:真的,

  计算值:{

  //这是伪代码。

  //缓存数组[{ tab1/component name: comp, tab2/component name: comp },{ tab1/component name: comp, tab2/component name: comp }]

  cacheArray() {

  归还这个。$store.state.xxx.groupCache

  },

  //当前选择的分组示例:0/1/2.这里用来读取缓存数组的索引。

  groupIndex() {

  归还这个。$store.state.xxx.groupIndex

  }

  },

  已创建:函数已创建(){

  //当前选项卡的缓存

  const cache=this . cache array[this . group index]

  this . cache=cache object . create(null)

  //TODO页面初始化事件,以后可以触发。

  },

  已销毁:函数已销毁(to,form) {

  //TODO页面离开事件,稍后可以触发关闭事件。

  },

  render:函数render() {

  var slot=this。$slots.default

  var vnode=getFirstComponentChild(slot)

  var component options=vnode vnode . component options

  //检查模式

  var ref$1=this

  var cache=ref$1.cache

  const key=` $ { this . group index }/$ { component options。Ctor.options.name} `

  //有一个键直接读取

  if(缓存[键]) {

  vnode . component instance=cache[key]。件实例

  }否则{

  //没有缓存。

  cache[key]=vnode

  }

  //写入缓存

  这个。$store.dispatch(setGroupCache ,{

  缓存:this.cache

  })

  返回vnode (slot slot[0])

  }

  }

  

如何使用

  就说一次。

  群组-保持活动

  路由器视图:key=key /

  /group-保持活动状态

  //必须区分键

  计算值:{

  key() {

  返回“{选择索引}/{完整路径}”

  },

  }

  

主题说完了,整点其他的

  1.摘要:在group-keep-alive组件中设置true,当前组件设置为抽象组件。我姐李:就是提前拦截下一关(包括子元素)事件,以便操作下一关。

  2.路由器视图:key=key 。这个键的作用是区分同一个组件是否重复使用一个实例。

  这就是这篇关于vue自定义keepalive组件的文章。有关vue keepalive组件的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: