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

小公司做网站的实力免费网站推广网址

小公司做网站的实力,免费网站推广网址,app网站模板,做暧在线观看网站文章目录 一、场景描述二、组件为什么会加载两次?三、使用 defineAsyncComponent 后为何只加载一次?四、总结对比 在 Vue 3 开发中,可能会遇到这样的问题:某个子组件在页面加载时“看起来”被创建了两次。多少有点让人疑惑&#x…

文章目录

    • 一、场景描述
    • 二、组件为什么会加载两次?
    • 三、使用 defineAsyncComponent 后为何只加载一次?
    • 四、总结对比

在 Vue 3 开发中,可能会遇到这样的问题:某个子组件在页面加载时“看起来”被创建了两次。多少有点让人疑惑,也可能影响性能和逻辑的正确性。

一、场景描述

子组件使用方式,示例代码:

// template
<Childv-if="!detailLoading"ref="childRef"v-model:info="info"
/>// script
import Child from './components/Child.vue';// 在请求详情接口前设置 detailLoading.value = true;接口完成后,在 finally 中设置 detailLoading.value = false
const detailLoading = ref(true);
const getModelDetail = async () => {detailLoading.value = true;try {const res = await xxx;info.value = res;} finally {detailLoading.value = false;}
};

结果:Child 组件被加载了 两次

二、组件为什么会加载两次?

这个问题的核心在于 Vue 的响应式系统和组件生命周期行为,尤其是与 v-if、ref 和组件引入方式有关。

1. v-if 控制组件渲染时机

因为我们使用了 v-if=“!detailLoading” 来控制 < Child > 是否渲染:

<Child v-if="!detailLoading" />

也就是说:

  • 初始时 detailLoading 是 true,所以组件不会渲染。
  • 请求完成后设置 detailLoading = false,触发组件首次渲染。
  • 如果中间状态变化导致 detailLoading 再次变为 true,再变回 false,组件就会再次重新创建。
  • 所以如果我们在代码中不小心多次修改了 detailLoading 的值,或者初始值处理不当,组件就会被创建多次。

2. import 引入组件是同步的

import Child from './components/Child.vue';

这是标准的 ES Module 导入方式,模块在应用启动时就会被加载并执行一次。但注意:导入本身只执行一次,不代表组件实例只创建一次。

每次 v-if 变为 true,Vue 都会重新创建一个新的组件实例。因此:

组件加载次数 = v-if 从 false 变为 true 的次数

三、使用 defineAsyncComponent 后为何只加载一次?

更改引入组件的方式:

const Child = defineAsyncComponent(() =>import('./components/Child.vue')
);

此时发现组件只加载了一次。

原因分析

  1. defineAsyncComponent是懒加载机制
  • 它会在组件第一次需要渲染时才去异步加载组件文件。
  • 加载完成后,组件会被缓存,后续再次渲染时不会再发起新的网络请求。
  1. Vue 内部做了缓存优化
  • 当使用 defineAsyncComponent 包裹动态导入时,Vue 会自动缓存这个异步组件的结果。即使你多次切换 v-if 的值,它也不会重复加载组件文件。

也就是说:

虽然组件实例可能会被销毁重建(由 v-if 控制),但组件文件只加载一次。

四、总结对比

特性import 直接引入defineAsyncComponent + import()
组件文件加载方式同步加载,初始化时即加载异步加载,按需加载
文件是否重复加载不会(模块单例)不会(内部缓存)
组件实例是否重复创建是(由 v-if 控制)是(由 v-if 控制)
适合场景小型组件或首屏必须使用的组件大型组件、非首屏组件、懒加载优化

总结:

  • 使用 import 引入的组件只会加载一次模块,但实例可能被多次创建。
  • 使用 defineAsyncComponent 可以延迟加载组件,并利用 Vue 的缓存机制避免重复请求。
  • 实际开发中应根据组件大小、使用频率选择合适的加载方式。
http://www.dtcms.com/wzjs/189458.html

相关文章:

  • 网站建设南京公司我国网络营销现状分析
  • 深圳网站建设托管市场营销比较好写的论文题目
  • 新疆生产建设兵团检察院网站深圳搜索竞价账户托管
  • 那个网站可以免费做风面网站统计分析工具的主要功能
  • 平面设计师如何做网站李守洪
  • 凡客诚品什么档次优化方案官方网站
  • 南京网站制作网络营销文案策划都有哪些
  • 做关键词优化需要修改网站标题大学生网络营销策划方案书
  • 深圳网站建设与制作公司郑州最新通告
  • 网站怎么做详情页淘宝关键词推广
  • 网站建设策划书范文绍兴seo管理
  • 专门做二手房车的网站域名查询系统
  • 泰州网站建设在线子域名二级域名查询工具
  • wap的网站模板下载今日头条淄博新闻
  • 哪里可以做网赚网站百度网盘登陆
  • 用wordpress建自定义页面关键词优化排名工具
  • 门户网站 流量整合营销的概念
  • 商城类网站建设步骤百度权重怎么提高
  • 帝国网站如何做中英文切换网络营销方案案例
  • 建设思政教育网站案例现在网络推广哪家好
  • 天津网站开发工资水平品牌推广方案思维导图
  • 怎么做网站优化国际重大新闻事件2023
  • 网站设计的原则自己如何免费做网站
  • 做去自己的网站百度指数的搜索指数
  • 产品开发策略seo网站是什么意思
  • 网站开发询价单nba新闻最新消息
  • 东阿网站建设电话长春关键词搜索排名
  • 苏州无锡外贸网站建设网络营销的优势是什么
  • 东莞饰品网站建设化妆品营销推广方案
  • 教育培训网站建设关键词优化一般收费价格