当前位置: 首页 > wzjs >正文

有谁可以做网站寄生虫云南建设工程招投标信息网

有谁可以做网站寄生虫,云南建设工程招投标信息网,免费广告制作,烟台专业网站推广在 Vue3 中实现两个组件的动态切换保活&#xff0c;核心是通过 <component> 动态组件与 <KeepAlive> 缓存组件的组合使用。以下是具体实现方案和进阶技巧&#xff1a; 一、基础实现方案 1. 动态组件 KeepAlive 保活 使用 <component :is> 实现动态切换&am…

在 Vue3 中实现两个组件的动态切换保活,核心是通过 <component> 动态组件与 <KeepAlive> 缓存组件的组合使用。以下是具体实现方案和进阶技巧:


一、基础实现方案

1. 动态组件 + KeepAlive 保活

使用 <component :is> 实现动态切换,并用 <KeepAlive> 包裹以实现状态缓存:

<template><div><button @click="toggleComponent">切换组件</button><KeepAlive><component :is="currentComponent" /></KeepAlive></div>
</template><script setup>
import { shallowRef } from 'vue'
import CompA from './CompA.vue'
import CompB from './CompB.vue'const components = { CompA, CompB }
const currentComponent = shallowRef(CompA) // 使用 shallowRef 避免深度响应式const toggleComponent = () => {currentComponent.value = currentComponent.value === CompA ? CompB : CompA
}
</script>

关键点

  • shallowRef 替代 ref:避免对组件对象进行深度响应式转换,减少性能开销
  • KeepAlive 包裹:缓存组件实例,保留表单输入、滚动位置等状态

二、高级配置技巧

1. 精准控制缓存范围

通过 include/exclude 指定需缓存的组件名:

<KeepAlive include="CompA,CompB" max="2"><component :is="currentComponent" />
</KeepAlive>

参数说明

  • include:字符串/正则/数组,匹配组件 name 属性
  • max:最大缓存数(超过时按 LRU 算法淘汰旧实例)
2. 生命周期管理

利用专属钩子处理缓存状态:

<script setup>
import { onActivated, onDeactivated } from 'vue'onActivated(() => {console.log('组件激活:恢复定时器/网络请求')timer = setInterval(fetchData, 5000)
})onDeactivated(() => {console.log('组件休眠:清理资源')clearInterval(timer)
})
</script>

对比常规生命周期

场景常规组件被缓存组件
首次加载created → mountedcreated → mounted → activated
离开beforeUnmount → unmounteddeactivated
再次进入重新创建activated

三、常见问题解决

1. 组件未缓存
  • 原因:组件未声明 name 属性
  • 解决方案
    <!-- CompA.vue -->
    <script>
    export default { name: 'CompA' }
    </script><!-- 或使用 setup 语法糖 -->
    <script setup>
    defineOptions({ name: 'CompA' }) // 需安装 unplugin-vue-define-options 插件
    </script>
    
2. 动态切换卡顿
  • 优化方案
    • 使用异步组件加载(结合 defineAsyncComponent
    • 添加 CSS 过渡动画:
      .fade-enter-active, .fade-leave-active {transition: opacity 0.3s;
      }
      .fade-enter-from, .fade-leave-to {opacity: 0;
      }
      
3. 表单状态丢失
  • 强制刷新缓存:通过 key 属性重置组件
    <KeepAlive><component :is="currentComponent" :key="customKey" />
    </KeepAlive>
    
    切换时更新 customKey 值即可触发重新渲染。

四、性能优化建议

  1. 按需缓存:仅对高频切换或状态复杂的组件使用缓存
  2. 内存控制:设置 max 属性避免内存溢出(推荐值:3-5)
  3. 数据持久化:在 deactivated 时保存状态至 localStorage:
    onDeactivated(() => {localStorage.setItem('formData', JSON.stringify(formState))
    })
    

五、完整代码示例

<template><div class="container"><div class="switch-buttons"><button v-for="(comp, name) in components" :key="name"@click="currentComponent = comp":class="{ active: currentComponent === comp }">{{ name }}</button></div><KeepAlive :max="3"><Transition name="fade" mode="out-in"><component :is="currentComponent" /></Transition></KeepAlive></div>
</template><script setup>
import { shallowRef } from 'vue'
import CompA from './CompA.vue'
import CompB from './CompB.vue'const components = { CompA, CompB }
const currentComponent = shallowRef(CompA)
</script><style scoped>
.switch-buttons {margin-bottom: 20px;
}
button {padding: 8px 16px;margin-right: 10px;&.active {background: #1890ff;color: white;}
}
.fade-enter-active, .fade-leave-active {transition: opacity 0.3s;
}
.fade-enter-from, .fade-leave-to {opacity: 0;
}
</style>

扩展应用场景

  • 仪表盘模块切换(保留图表缩放状态)
  • 多步骤表单(缓存已填写步骤)
  • 选项卡式数据展示(保持分页器位置)

通过合理使用动态组件与 KeepAlive,可显著提升复杂交互场景下的用户体验。建议结合 Vue Devtools 观察组件缓存状态,针对性优化关键路径性能。


文章转载自:

http://EqA3GdjA.xfcjs.cn
http://T39fb8LE.xfcjs.cn
http://KOujfmj5.xfcjs.cn
http://QuG8tGcG.xfcjs.cn
http://MCdAlK0r.xfcjs.cn
http://l7ONjoCE.xfcjs.cn
http://dbxuT6eF.xfcjs.cn
http://nx6c1zRi.xfcjs.cn
http://jEbNXh0o.xfcjs.cn
http://Mv62EByo.xfcjs.cn
http://YUGRGN5F.xfcjs.cn
http://qBuTTJOh.xfcjs.cn
http://IrvoQbH9.xfcjs.cn
http://qIOqvqSO.xfcjs.cn
http://UBkxV3WO.xfcjs.cn
http://nAcorRLb.xfcjs.cn
http://i3bAfVrw.xfcjs.cn
http://D3qJUnUD.xfcjs.cn
http://5Z3UBenS.xfcjs.cn
http://g5nfGqt4.xfcjs.cn
http://JoFy6qli.xfcjs.cn
http://41RZBUAO.xfcjs.cn
http://Nwi1Galz.xfcjs.cn
http://zgbElCFz.xfcjs.cn
http://Bba8Eqie.xfcjs.cn
http://yyxx0RxL.xfcjs.cn
http://zTrZnL2I.xfcjs.cn
http://dhIGJbHt.xfcjs.cn
http://htGuj87m.xfcjs.cn
http://71vufyMY.xfcjs.cn
http://www.dtcms.com/wzjs/752413.html

相关文章:

  • 百度seo站长展示设计作品欣赏
  • 漯河住房和城乡建设局网站asp网站建设外文参考文献
  • 专业建设网站公司哪家好公司网站建设的目的
  • 网站开发框架专业的昆明网站建设
  • 网站的关键词报价的网站想做网络推广的公司
  • 网站推广的六种方式泰安网络软件公司
  • 做评测系统网站首先要干嘛百度软件
  • 如何用手机建网站郑州商务网站建设
  • 做网站网页排版错误大连专业手机自适应网站制作
  • 如果建设一个网站上海网站建设网站开发
  • 电脑店免费建站访问国外网站太慢
  • 电子商务公司网站建立前期准备wordpress如何导出数据
  • 石家庄做网站排名网站改版 翻译
  • 大型网站建设的价格织梦可以做视频网站么
  • 做百度网上搜索引擎推广最好网站网站ping怎么做
  • 各大网站网络推广的收费wordpress所有外链本地化
  • iis装网站山东德州如何网站建设教程
  • 温州网站链接怎么做邀请码网站怎么做
  • 网站主页布局益阳网页设计
  • 可以做视频推广的网站吗欧洲一卡2卡3卡4卡高清免费
  • 做网站空间不给账号密码织梦网站模板怎么安装
  • wordpress建外贸站分公司注册流程
  • 建公司网站步骤深圳福田搬家公司
  • 石油大学网页设计与网站建设2345网址导航手机版
  • 主要的网站开发技术wordpress文章编辑经典
  • 镇江论坛网站建设wordpress 多个memcached
  • 代做效果图网站哪家好成都设计公司排名简介
  • 木渎网站建设做一个官方网站多少钱一个
  • 怎么建设一个国外的网站微信公众平台官网电话
  • 利川市网站建设网站推广线上推广