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

前端八股整理(Vue 02)|组件通信、生命周期、v-if 与 v-show

前端八股整理(Vue 02)|组件通信、生命周期、v-if 与 v-show

1.讲讲VUE中的组件通信

组件通信的基本原则是单向数据流,最基础的是父子通信:父传子通常通过 props,在 Vue3 里一般用 defineProps 接收,子组件接收父组件传过来的参数.子传父,由于是单项数据流,应该是子通过传递事件通知父组件,数据需要更新.在 Vue3 中可以使用 defineEmits 声明事件并通过 emit 触发。如果是跨层级组件通信,用 provide 和 inject 进行.如果是兄弟组件或者多个组件之间共享状态,通常会把状态提升到共同父组件,或者在项目里直接用 Pinia 这类状态管理方案。v-model 本质上也是 props + emit 的一种语法糖。”

2.生命周期钩子,created和mounted的区别?可以在created里面发请求吗,为什么?created钩子中为什么不可以进行dom操作?dom操作会有什么影响?

生命周期钩子:

Vue 的生命周期可以理解为组件从创建、挂载、更新到卸载的整个过程。在不同阶段,Vue 会提供对应的生命周期钩子,方便我们在合适的时机执行逻辑。

如果按 Options API (vue2)来说,常见可以分成四个阶段:

第一阶段是创建阶段,包括 beforeCreate 和 created。

beforeCreate 时实例刚开始初始化,data、computed、methods 等都还不能正常访问;

created 时这些配置已经初始化完成了,但组件还没有挂载到页面上,所以这时还拿不到真实 DOM。

第二阶段是挂载阶段,包括 beforeMount 和 mounted。

beforeMount 表示组件即将首次渲染,模板已经准备好,但真实 DOM 还没挂载;

mounted 表示组件已经挂载到页面,可以访问真实 DOM,因此常用于 DOM 操作、发送请求、初始化第三方库等。

第三阶段是更新阶段,包括 beforeUpdate 和 updated。

当响应式数据变化时,会先触发 beforeUpdate,这时数据已经变了,但页面还没更新;

等 DOM 根据最新数据完成更新后,会触发 updated。不过一般不建议在 updated 里继续修改响应式数据,否则可能引起重复更新甚至死循环。

第四阶段是卸载阶段, 包括beforeDestroy 和 destroyed。(Vue3:beforeUnmount / unmounted)

beforeDestroy 表示组件即将被卸载,此时实例还可以使用;

destroyed表示组件已经卸载完成,事件监听、定时器、订阅等资源一般会在这个阶段清理。

所以在 created 的阶段可以做一些不依赖于真实 dom 的操作,比如初始化数据,比如做一些 js 计算

beforeDestroy,可以拿到实例上的数据和方法,也通常还能访问当前组件对应的 DOM,做一些收尾逻辑、清理逻辑是可以的,但这个阶段的重点不是“再做业务计算”,而是清理和收尾。

created和mounted的区别?

区别主要是一个能操作真实的 dom,一个不能操作.从使用场景上来说,created 更适合做数据和逻辑初始化,比如初始化状态、处理参数、发请求这类不依赖 DOM 的操作;而 mounted 更适合做依赖页面节点的逻辑,比如获取元素尺寸、操作 DOM、初始化第三方插件等。

大量第三方插件本质上不是“给你一个纯函数”,而是接收一个真实 DOM 容器,然后往这个容器里挂内容、读尺寸、绑事件。比如 echart.但是也有一些第三方库不一定需要 DOM,比如 day.js

可以在created里面发请求吗,为什么?

可以。因为 created 阶段组件实例已经创建完成,data、methods、computed、watch 等都已经初始化好了,所以这时候可以访问组件数据并执行业务逻辑。而发送请求本身通常不依赖真实 DOM,因此完全可以在 created 阶段发请求。

补充:

什么时候更适合放在 mounted?

  • 请求参数依赖 DOM 尺寸:图表要先拿到Dom
  • 请求回来后马上要操作 DOM
  • 请求回来后要初始化依赖容器的第三方插件
  • 需要拿某个元素的位置、宽高再决定请求或渲染逻辑:虚拟列表

created钩子中为什么不可以进行dom操作?

created 不能做 DOM 操作,因为这个阶段只是实例和数据初始化完成了,组件还没有真正挂载到页面上,真实 DOM 还不存在,所以拿不到页面节点。只有到了 mounted 之后,真实 DOM 才已经渲染出来,才能做 DOM 相关操作。

实例:组件被创建出来之后,在内存里真正工作的那个对象.created 阶段组件实例已经创建好了,但这个组件实例对应的内容还没有挂载到页面 DOM 上

dom操作会有什么影响?

  1. 性能上的影响

因为 DOM 操作不是普通 JS 变量赋值,它会涉及浏览器渲染流程。修改了一些元素的内容,样式,浏览器可能要重新计算样式,重新布局,绘制等等,所以频繁 DOM 操作会比单纯操作 JS 数据更重,性能开销更大。

2.在 vue 中乱做 dom操作,可能和响应式更新冲突

vue 本来希望你修改数据,vue 帮你更新页面.如果你自己又手动去改 dom,比如自己改 innerHTML,或者插入删除子节点,那就可能会出现 vue 更新时把你手动改的内容覆盖掉,页面状态和数据状态不一致,不好维护

3.v-if和v-show,和直接销毁dom有什么区别,你说v-if性能开销大,为什么?

  • v-show 改 display
  • v-if 控制是否渲染
  • 高频切换更适合 v-show
  • v-if 会有创建/销毁开销

和直接销毁dom有什么区别?

  • v-if:是通过 Vue 的模板和响应式系统,让框架决定这块内容要不要渲染
  • 直接销毁 DOM:通常是你自己手动用原生 DOM API 去删节点,比如 removeChild、innerHTML = ‘’

在 Vue 里一般不建议手动直接操作 DOM,因为这会绕开 Vue 的数据驱动,更新机制

你说v-if性能开销大,为什么?

对于 v-if 来说,初始条件如果是 false,就不会渲染,条件如果被切换,就会触发,创建组件/节点,子组件你生命周期重新走一遍,开销主要体现在,频繁切换时开销更大.

对于v-show 来说,不管初始条件是什么,元素都会先渲染出来,后面只是切换 display:none,初始化开销更高一点,但是切换开销更小

延伸:v-if 和 v-show都可以隐藏一个元素,想让他隐藏之后还占位用什么?

visibility: hidden 隐藏 占位

opacity: 0 看不见 占位 但元素通常还能响应事件,仍然可点击

http://www.jsqmd.com/news/820830/

相关文章:

  • RF隔离技术中的电感器原理与应用实践
  • 歌词滚动姬:免费在线LRC歌词制作工具终极指南
  • Bandhook-Kotlin UI开发技巧:Anko布局与RecyclerView高级用法
  • 【信息科学与工程学】信息科学领域工程——第二篇 材料工程 09——极性环境下材料评估
  • 从波特图看懂环路稳定性:电流型I/II/III补偿网络实战设计与仿真避坑
  • 开源漏洞情报自动化分诊系统:从数据采集到智能响应的工程实践
  • 100xPad:推动 Web3 社会责任与可持续发展的数字资产平台 - 博客万
  • 玉溪 CPPM 证书费用 云南本地采购经理报考 - 中供国培
  • 领信任安全架构的核心设计原则与关键技术二
  • 如何高效抓取抖音直播弹幕数据:3个提升工作效率的终极秘籍
  • 2000+ API 一把梭:agentic-ai-apis 让你少写 80% 的基础设施代码
  • 2026专业灯具照明包装设计公司权威排名榜单推荐:照明产品包装设计首选哲仕设计
  • 【AI大模型】KNN算法是什么?有什么作用?
  • 2026年GEO优化服务哪家好 TOP5实力榜:行业格局与服务商横评 - 资讯焦点
  • 给信号‘上保险’:用Python和MATLAB可视化拉普拉斯变换如何‘掰弯’不可积函数
  • Amlogic S9xxx系列设备Armbian系统深度定制指南
  • 开源ChatGPT前端部署指南:从零搭建私有AI对话界面
  • 告别AWCC!Dell G15游戏本散热控制终极开源方案
  • 基于AI的Google Slides插件开发:从原理到实战部署
  • 2026年五强生成引擎优化公司排名技术力盘点及企业选型实操指南针 - 资讯焦点
  • 2026年音响厂家品牌推荐:靠谱的音响品牌/实力强的音响公司/有名的音响品牌 - 品牌推广大师
  • 2026年成都宝藏散酒铺品牌推荐TOP榜,快来一探究竟! - 品牌推荐官方
  • 别再只会跑测试了!GoogleTest这5个命令行参数,帮你把单元测试效率拉满
  • 2026年六大geo 推广详评及企业级选型能力象限 - 资讯焦点
  • CircuitPython嵌入式开发:实时编程、串口调试与REPL交互全解析
  • 四川盛世钢联国际贸易有限公司 -成都中厚板|成都热轧卷|成都花纹板|成都锅炉板|成都容器板|成都高强度热轧钢板 - 四川盛世钢联营销中心
  • 2026年度合肥GEO优化服务商权威TOP5榜单:多维度全场景深度测评 - 元点智创
  • 向华为学习——解读企业IPD业务流程变革总体规划设计方案【附全文阅读】
  • 从张量迹到行列式:用Python (NumPy/SymPy) 验证连续介质力学中的不变量
  • FPGA IP核技术解析与OpenCore Plus交付模型实践