详解vue中的compute,vue中的意思

  详解vue中的compute,vue中的意思

  本文主要介绍了Vue中的保活技术,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

  :

目录

   1.导言2。使用2.1参数2.2生命周期功能2.3应用场景总结

  

1. 简介

  Keep-alive是Vue的内置组件。当它包装动态组件时,它缓存不活动的组件实例,而不是销毁它们。与transition类似,keep-alive是一个抽象组件:它不会将自身呈现为DOM元素,也不会出现在父组件链中。

  作用:在组件切换过程中将状态保留在内存中,防止DOM的重复渲染,减少加载时间和性能消耗,提高用户体验。

  原理:调用创建的函数时,需要缓存的VNode节点保存在this.cache中。/渲染(页面渲染)时,如果VNode名称满足缓存条件(可以通过include和exclude来控制),则将之前缓存的VNode实例从this.cache中取出进行渲染。

  (VNode:虚拟DOM,实际上是一个JS对象)

  

2. 使用

  

2.1 参数

  参数值描述包括字符串或正则表达式。只有名称匹配的组件才会被缓存。排除字符串或正则表达式。任何名称匹配的组件都不会被缓存。最大数量可以缓存最大数量的组件实例。注意:包含/排除值是组件中的名称命名,而不是路由中的组件名称命名;

  //router.js

  {

  路径:“/home”,

  姓名:家,

  组件:()=导入(./views/home . vue’)

  },

  {

  路径:“/test”,

  名称:“测试”,

  组件:()=导入(./views/test . vue’)

  },

  //App.vue

  保持活动包括=test

  路由器-视图/

  /保持活力

  -

  补充:各种形式的包含/排除值。

  //1.组件名测试将被缓存(基本)

  保持活动包括=test

  路由器-视图/

  /保持活力

  //2.将名为A或B的缓存组件与动态组件结合使用。

  保持活动包括=a,b

  路由器-视图/

  /保持活力

  //3.若要使用正则表达式,请使用v-bind。

  keep-alive :include=/ab/

  路由器-视图/

  /保持活力

  //4.动态判断

  keep-alive:include= included components

  路由器-视图/

  /保持活力

  //5.组件名测试将不会被缓存。

  保持活动排除=test

  路由器-视图/

  /保持活力

  //6.与过渡一起使用

  过渡

  点火电极

  路由器-视图/

  /保持活力

  /过渡

  //7.数组(使用“v-bind ”)

  keep-alive :include=[a , b]

  组件:is= view /组件

  /保持活力

  //test.vue

  模板

  div class=wrap

  输入类型=文本 v-模型=输入值

  /div

  /模板

  脚本

  导出默认值{

  名称:“测试”,

  data(){

  返回{

  输入值:,

  }

  }

  }

  /脚本

  此时,当我们切换路由时,会发现测试文件中的inputVal会被缓存,而home中的值不会被缓存。

  此外,我们还可以通过路由中的 meta 属性来控制,是否需要缓存。在测试路线中添加元。keepAlive属性为true,表示需要缓存当前路由组件。

  //router.js

  {

  路径:“/home”,

  姓名:家,

  组件:()=导入(./views/home . vue’)

  },

  {

  路径:“/test”,

  名称:“测试”,

  元:{

  keepAlive:真

  },

  组件:()=导入(./views/test . vue’)

  },

  KeepAlive代码可以用v-if包装。如果meta中的keep-alive为true,则将被缓存。没有哪一方不会缓存它。

  点火电极

  router-view v-if= $ route . meta . keepalive /

  /保持活力

  路由器-查看v-if=!$route.meta.keepAlive /

  在实践中,我们可以结合route guard来实现对需要缓存的组件的缓存。

  Portal:详细讲解Vue路由钩子和应用场景。

  导出默认值{

  beforeRouteLeave(收件人、发件人、下一个){

  to . meta . keepalive=true;

  next();

  }

  }

  /脚本

  

2.2 生命周期函数

  描述激活名称是在激活保活组件时调用的,在服务器端渲染时不调用钩子函数。停用keep-alive组件时调用Deactivated,在服务器端呈现期间不调用挂钩。使用keep-alive会将数据保留在内存中。如果想在每次进入页面时都获得最新的数据,就需要在激活阶段获得数据,并承担在最初创建的hook中获得数据的任务。

  在keep-alive中创建的组件将有两个生命周期挂钩:激活和停用。

  Activated:在组件被激活时调用,也在组件首次呈现时调用,然后在每次keep-alive被激活时调用。

  停用:当组件被停用时调用。

  注意:这两个生命周期只有在组件被包裹在keep-alive中时才会被调用,而作为普通组件使用时不会被调用,而2.1.0版本以后,即使被包裹在keep-alive中,使用exclude排除后这两个钩子仍然不会被调用!另外,这个钩子在服务器渲染的时候不会被调用。

  什么时候获取数据?

  引入keep-alive时,页面第一次进入时,钩子的触发顺序是创建-挂载-激活,退出时触发停用。

  再次进入(向前或向后)时,只触发激活。

  我们知道,keep-alive之后,页面模板第一次初始化解析成HTML片段后,不会重新解析而是再次进入时读取内存中的数据。只有当数据发生变化时,才使用VirtualDOM进行diff更新。因此,页面输入的数据采集也应该被激活。数据下载后,DOM手动操作的部分也要在activated中执行才能生效。

  因此,数据采集代码的副本应保持激活状态,或者创建的代码应直接转换为激活状态,而不包括已创建的部分。

  

2.3 应用场景

  如果不使用keep-alive组件,页面回滚时仍然会重新渲染页面,触发已创建的钩子,体验不好。

  在以下场景中使用保活组件将显著改善用户体验,例如菜单具有多级关系的场景(列表页面详细信息页面):

  在列表页面,点击商品跳转到商品详情,返回后仍会显示原有信息;列表跳转到订单明细、退货等场景;

  

总结

  本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!

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

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