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

Vue笔记(五)--组件进阶

这一节了解一下Vue3中的组件进阶组件在被创建出来到渲染完成会经历一系列过程同样组件的销毁也会经历一系列过程组件从创建到销毁的这一系列过程被称为组件生命周期生命周期的节点被定义一系列方法也被称为生命周期钩子。简单总结:API1. beforeCreate含义组件实例刚创建数据、方法都未初始化 作用几乎不用不能操作 this 数据script export default { beforeCreate() { console.log(组件即将创建) } } /script2. created含义组件创建完成数据 / 方法已初始化但未生成 DOM 作用请求接口、初始化数据、定时器script export default { data(){return {list:[]}}, created(){ console.log(组件创建完毕可请求数据) } } /script3. beforeMount含义挂载 DOM 之前 作用挂载前最后一次修改模板数据script export default { beforeMount(){ console.log(即将渲染DOM) } } /script4. mounted 最常用含义DOM 已渲染挂载完成 作用操作 DOM、初始化插件、开启定时器、请求数据templateview我是组件/view/template script export default { mounted(){ console.log(DOM已挂载完毕) } } /script5. beforeUpdate含义数据变化视图重新渲染前 作用更新前获取旧 DOM 状态script export default { beforeUpdate(){ console.log(视图即将更新) } } /script6. updated含义视图更新完成 作用更新后操作 DOMscript export default { updated(){ console.log(视图已更新) } } /script7. beforeUnmount含义组件销毁前 作用清除定时器、移除监听script export default { beforeUnmount(){ clearInterval(this.timer) } } /script8. unmounted含义组件完全销毁 作用收尾清理工作script export default { unmounted(){ console.log(组件已销毁) } } /script9. props 类型校验含义限制传入参数类型 作用规范传参、控制台报错提示script export default { props:{ name:String, age:Number } } /script10. props required含义强制必须传参 作用保证组件必备参数script export default { props:{ title:{ type:String, required:true } } } /script11. props default 默认值含义未传参时使用默认值 作用防止报错、给默认展示script export default { props:{ msg:{ type:String, default:默认提示 } } } /script12. props validator 自定义校验含义自定义规则校验参数 作用范围、格式限制script export default { props:{ score:{ validator(val){ return val0 val100 } } } } /script13. props 单向只读含义子组件不能修改 props 作用遵循单向数据流避免数据混乱template view{{ title }}/view /template script export default { props:[title], methods:{ change(){ // 错误不能修改 props // this.title xxx } } } /script14. 局部 Mixin含义抽取公共逻辑复用 作用复用生命周期、方法、数据script // 定义混入 const myMixin { created(){console.log(mixin 加载)} } export default { mixins:[myMixin] } /script15. 全局 Mixin含义所有组件自动混入 作用全局公共逻辑import { createApp } from vue const app createApp() app.mixin({ mounted(){console.log(每个组件都触发)} })16. Mixin 合并规则含义生命周期先执行 mixin 再组件选项以组件优先 作用理解覆盖逻辑script const m { mounted(){console.log(mixin)}} export default { mixins:[m], mounted(){console.log(组件自身)} } /script17. 局部自定义指令含义封装 DOM 操作逻辑 作用自动聚焦、权限按钮template input v-focus / /template script export default { directives:{ focus:{ mounted(el){el.focus()} } } } /script18. 全局自定义指令含义全局所有组件可用app.directive(focus,{ mounted(el){el.focus()} })19. 指令传参含义指令可传递参数、修饰符 作用灵活配置指令行为template view v-colorred文字/view /template script export default { directives:{ color:{ mounted(el,binding){ el.style.color binding.value } } } } /script20. provide 提供含义父 / 祖先向下提供数据 作用多层嵌套不用逐层 propsscript setup import { provide } from vue provide(appName,Vue3项目) /script21. inject 注入含义后代组件接收数据 作用跨层级取值script setup import { inject } from vue const name inject(appName) /script22. Teleport含义将组件 DOM 传送到指定节点 作用弹窗、浮层不受父样式嵌套影响template teleport tobody view classmask我是全局弹窗/view /teleport /template style .mask{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);} /style栗子:template view classcontainer button clickshowLife !showLife显示/隐藏生命周期组件/button view v-ifshowLife LifeDemo / /view PropsDemo title我是标题 :score88 / view classmt20 input v-focus placeholder进入页面自动聚焦 classinput / /view InjectDemo / button clickshowModal true classmt20打开Teleport弹窗/button teleport tobody view v-ifshowModal classmask view classmodal-box text全局弹窗不受父样式限制/text button clickshowModal false classmt20关闭/button /view /view /teleport /view /template script setup import { ref, provide } from vue // 控制生命周期组件显示 const showLife ref(true) const showModal ref(false) const LifeDemo { created() { console.log(1.created 组件创建完成) }, mounted() { console.log(2.mounted DOM挂载完毕) }, beforeUnmount() { console.log(3.beforeUnmount 准备销毁) }, unmounted() { console.log(4.unmounted 组件已销毁) }, template: view classmt20生命周期组件/view } const PropsDemo { props: { title: { type: String, default: 默认标题 }, score: { type: Number, validator: val val 0 val 100 } }, template: view classmt20标题{{title}} 分数{{score}}/view } const directives { focus: { mounted(el) { // 自动聚焦 el.focus() } } } const myMixin { created() { console.log(Mixin 公共逻辑执行) } } provide(appInfo, { name: Vue3进阶项目, version: 2.0 }) const InjectDemo { inject: [appInfo], template: view classmt20项目名称{{appInfo.name}}/view } /script style scoped .container { padding: 30rpx; } .mt20 { margin-top: 20rpx; } .input { border: 1rpx solid #eee; padding: 20rpx; border-radius: 10rpx; } .mask { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center; } .modal-box { background: #fff; padding: 40rpx; border-radius: 15rpx; } /style
http://www.rkmt.cn/news/1380823.html

相关文章:

  • 虚拟电厂与低碳园区解决方案:能碳一体化总体架构、虚拟电厂与低碳园区的融合,是推动能源转型与碳减排的关键路径
  • 安卓恶意软件检测:MH-1M百万级数据集构建、评估与应用实战
  • Claude Code 用户如何快速接入 Taotoken 解决 API 被封与 Token 不足问题
  • Drupal REST XSS漏洞CVE-2019-6341原理与实战解析
  • DSP、FPGA、STM32大对决:谁才是嵌入式开发的“天选之子”?
  • 杭州上城慧启装饰装修:海宁专业的单玻透明隔断施工公司推荐几家 - LYL仔仔
  • Windows Cleaner如何5步解决C盘爆红问题?完全指南助你释放宝贵空间
  • 2026降AIGC革命:2026权威工具测评榜与精准避坑指南
  • ROFL-Player:英雄联盟回放播放的终极解决方案,告别版本兼容烦恼
  • 基于AVR单片机的FPGA数字无线电独立控制板设计与实现
  • 深入解析NxDumpTool:Switch游戏文件系统提取的终极指南 [特殊字符]
  • 别只盯着主控芯片!拆解STM32最小系统板:电源、时钟、复位三大支柱电路深度解析
  • 创业团队如何利用Taotoken统一管理多个AI模型API并控制开发成本
  • 告别RaiDrive广告!用开源rclone+Alist,免费把阿里云盘/百度网盘变成电脑本地硬盘
  • 树莓派DIY智能行走辅助装置:超声波测距与语音振动告警实战
  • 从账单清晰度看 Taotoken 按 Token 计费模式的实际价值
  • 简单三步搞定B站视频下载:BiliDownloader完整使用教程
  • LRCGET:一键为本地音乐库下载同步歌词的智能工具
  • 2026意大利艺术漆/进口艺术漆十大品牌推荐:权威测评精选 - 栗子测评
  • RAG 为什么一上 Embedding 微调就开始域内涨却域外掉:从 Contrastive Margin 到 Hard Negative Decay 的工程实战
  • 前端开发者的救星:如何在3分钟内实现HTML转Word文档?
  • Neat Bookmarks:重新定义浏览器书签管理的思维模式
  • 从代码到陪伴:探索DyberPet桌面宠物框架的创造艺术
  • 基于BERT的大语言模型越狱攻击检测:从原理到工程实践
  • FeHelper前端助手终极升级指南:如何快速迁移到最新版本并解锁30+开发工具
  • 分子对接终极指南:AutoDock-Vina如何让药物发现变得简单快速
  • 如何快速恢复加密压缩包密码:基于7zip的专业解决方案
  • 从零到实战:用Visio 2016画一张能用的企业级网络拓扑图(附华为设备示例)
  • 告别波动体验Taotoken高稳定性API带来的顺畅工作流
  • 利用 Taotoken 多模型聚合能力构建智能客服 Agent 系统