vue使用slot时子组件的onUpdated执行问题

vue入门到精通(六) 保姆级分享,快速上手并达到开发水准 阅读详情

vue使用slot时子组件的onUpdated执行问题

在使用 Vue 的插槽 (slot) 功能时,可能会遇到一个问题:当父组件的任何状态更新时,子组件的 onUpdated 事件会被触发。这个问题在使用默认插槽时尤为明显。
为了避免这种情况,可以使用作用域插槽。

示例代码

以下是一个示例,展示了如何使用默认插槽和作用域插槽。

父组件 (slot.vue)
<template>
    <div class="about">
        <h1>{{ msg }}</h1>
        <SlotChild class="parentClass">
        this is slot content; 
    <!-- 注释下一行就不会触发onupdated -->
        <slot></slot>
        <!-- 作用域插槽 可以访问子组件的状态 -->
        <template #s2="scope">
            hello slot1 
            {{ scope.text }}
        </template>
        </SlotChild>
    </div>
</template>

<script setup>
import SlotChild from './SlotChild.vue'
import { ref, onUpdated } from 'vue'

const msg = ref('this is messages')

onUpdated(() => {
    console.log('updated parent')
})

setTimeout(() => {
    msg.value = 'changed msg'
}, 1000)
</script>
子组件 (SlotChild.vue)
<template>
    <div class="about">
        <h1>SlotChild</h1>
        <slot name="default">
            this is default content
        </slot>
        <!-- 具名插槽,在一个组件里有多个插槽出口 -->
        <p>
            <slot name="s1" :text='text1'></slot><br>
            <slot name="s2" :text='text2'></slot><br>
        </p>
    </div>
</template>

<script setup>
import { ref, onUpdated } from 'vue'

const text = ref('this is default text')
const text1 = ref('this is scoped text1')

onUpdated(() => {
    console.log('updated child')
})
</script>

图片示例

在这里插入图片描述

示例代码

github-vue3-learn

解释

在上面的示例中,父组件 slot.vue 使用了默认插槽和作用域插槽。默认插槽会导致子组件在父组件状态更新时触发 onUpdated 事件。而作用域插槽则不会有这个问题,因为它们只会在相关的插槽内容发生变化时才会更新。

根据 Vue 官方文档的解释,作用域插槽允许我们将数据从子组件传递到父组件,从而避免不必要的更新。

通过使用作用域插槽,可以更好地控制组件的更新行为,避免不必要的性能开销。

参考资料

前端面试-Vue篇 Vue 阅读详情

相关推荐

前端100道八股文+50道场景题

闭包是指一个函数能够访问它外部函数作用域中的变量,即使外部函数已经执行完毕。形成闭包需要三个条件:函数嵌套、内部函数引用外部变量、外部函数返回内部函数。闭包的主要作用有三个:第一,实现数据私有化。比如可以用闭包创建私有变量,外部无法直接访问,只能通过特定方法操作。第二,模块化。可以用闭包封装代码,只暴露需要的接口。第三,函数柯里化和防抖节流等高级技巧都会用到闭包。闭包的缺点是可能造成内存泄漏。因为闭包引用的外部变量不会被垃圾回收,如果大量使用闭包且不及时清理,会占用过多内存。

weixin_50762268的博客 1409

Vue组件实例化(Instancing)原理与故障排查指南

Vue组件实例化(Instancing)是模板标签转化为可响应、可挂载组件实例的关键内核过程,它介于编译与挂载之间,决定组件是否拥有独立响应式系统、生命周期及props绑定能力。其本质并非简单构造对象,而是解析注册信息、校验名称匹配、验证props合法性并初始化上下文的复合机制。该过程失败将导致‘Unknown custom element’、‘component not registered’等高频报错,表现为组件区域空白、ref为空、钩子不触发等结构性失效。理解Instancing有助于精准定位注册时机

chuanjiaoye5017的博客 510

国产麒麟系统下用Rider开发C#桌面应用:从环境配置到Avalonia UI实战

本文详细介绍了在国产麒麟系统上使用JetBrains Rider开发C#桌面应用的完整流程,重点讲解了Avalonia UI框架的实战应用。从环境配置、Rider安装到Avalonia项目创建和UI开发技巧,全面覆盖了在非Windows环境下进行C#开发的关键步骤和优化建议,助力开发者高效构建跨平台桌面应用。

weixin_27791839的博客 387

VUE3-生命周期钩子《六》

生命周期的作用,页面加载的时候,主动执行某些程序。生命周期钩子有很多种,每一种都是有顺序的,如果不按照顺序执行的话,那么就不会触发某种效果,所以先要了解生命周期钩子函数的顺序。以下是官网提供的生命周期图示其中说2个主要使用的生命周期钩子,onMounted和onUpdated官网也有其他生命周期钩子介绍。

故里2130 8533

CentOS 7 安装 Python 3.10

我这里已经软链接了,正常未链接之前是python->python2.7而不是python3.10。python2.7默认安装是在 /usr/bin目录中,切换到/usr/bin/更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用。2. 安装 Python 3.10 必需的 openssl >= 1.1.1。默认的centos7是没有安装pip,先添加epel扩展源。/usr/bin/python 修改为如下。添加软链接,将原来的链接备份。添加python3的软链接。

bensonyang888的博客 2905

解读Autoware.Universe规划模块:Behavior Path Planner

Behavior Path Planner是一个基于行为生成不同形态路径的路径规划器,负责生成 基于交通状况的路径(path), 车辆可以移动的可行驶区域(drivable area)(在路径消息中定义), 将被发送到车辆接口的转向信号(turn signal) 命令。

策 5491

VUE3生命周期钩子

这个钩子会在组件的任意 DOM 更新后被调用,这些更新可能是由不同的状态变更导致的,因为多个状态变更可以在同一个渲染周期中批量执行 (考虑到性能因素)。如果你需要在某个特定的状态更改后访问更新后的 DOM,请使用 nextTick() 作为替代。这个钩子通常用于执行需要访问组件所渲染的 DOM 树相关的副作用,或是在服务端渲染应用中用于确保 DOM 相关代码仅在客户端执行。其所有同步子组件都已经被挂载 (不包含异步组件或 <Suspense> 树内的组件)。其所有子组件都已经被卸载。

g841805的博客 2189

锐捷交换机配置SSH

锐捷交换机配置ssh 一、组网需求 通过ssh功能可以远程登录管理设备 二、配置步骤 全局开启ssh服务,并且指定ssh版本 Ruijie>enable Ruijie#configure terminal Ruijie(config)#enable service ssh-server ------>开启SSH服务,默认关闭 Ruijie(config)#ip ssh version 2 ------>默认1.99版本,设置为版本2 添加登

Loners_fan的博客 1万+

vue基础 - 24 (vue3 生命周期:onBeforeMount、onMounted、onBeforeUpdate、onUpdated、onBeforeUnmount、onUnmounted)

setup相当于之前的created周期:创建时 onBeforeMount:DOM即将挂载 onMounted:DOM挂载完毕 onBeforeUpdate:DOM即将更新 onUpdated:DOM更新完毕 onBeforeUnmount:即将销毁 onUnmounted:销毁完毕 <script lang="ts"> import { defineComponen...

欢迎来到猫猫的博客 o_o ,如有问题,欢迎提出改正~ 4万+

卡尔曼滤波算法-Kalman Filter Algorithm

Kalman滤波是一种递归过程,主要有两个更新过程:时间更新和观测更新,其中时间更新主要包括状态预测和协方差预测,主要是对系统的预测,而观测更新主要包括计算卡尔曼增益、状态更新和协方差更新,因此整个递归过程主要包括五个方面的计算:1)状态预测;2)协方差预测;3)卡尔曼增益;4)状态更新;5)协方差更新; 用数学公式表示,如下: 状态预测:(1) 其中,X(k|k)是k时...

sunlin972913894的博客 2万+

AI Agent Harness实时监控大屏搭建实战

本文将以目前主流的AI Agent管控框架Harness为基础,结合React、ECharts、WebSocket技术,手把手带你搭建一套完整的实时监控大屏,覆盖全局概览、状态分布、工具调用统计、异常告警、实时日志等核心功能,不需要复杂的底层开发,复制代码就能快速跑通。本文我们从需求出发,先梳理了AI Agent的核心监控指标,然后搭建了监控大屏的静态布局,逐个实现了各个图表,对接了Harness的实时数据源,最后加了交互和告警功能,完整走了一遍监控大屏从设计到落地的全流程。

大数据洞察的博客 175

09、生命周期钩子

生命周期、nextclick,keep-alive

weixin_45954184的博客 675

第17章 后端开发最佳实践 —— OpenSpec + 智能体的工程化实战

后端开发有大量重复性的"样板代码"工作。我们可以创建自定义 Skill,让 AI 自动生成标准的三层架构代码。创建 Skill:后端 CRUD 生成器以 CodeBuddy 为例,在创建:其他工具用户请参考各自文档,了解如何创建自定义 Skills 或类似机制。skill.md## 描述根据实体定义自动生成标准的三层架构代码(Controller-Service-Repository)## 适用场景- 快速创建实体的 CRUD 接口- 保持代码结构一致性- 减少重复性编码工作## 使用方法。

快乐的修补匠的专栏 322

Vue小记

Vue 3 的 Composition API 本质上是一组 函数 API ( ref 、 reactive 、 onMounted 等),它们的设计原理是:在组件创建阶段(setup)同步调用,返回响应式数据或注册生命周期回调。Vue 2 的 data 、 methods 、 computed 是分散在各个选项中,由 Vue 内部在适当时机调用。Vue 3 统一改为 setup() 入口,所有逻辑在里面通过函数调用注册。方式二:在setup中按功能分区。setup是VUE3的入口点。

weixin_46140858的博客 184

【ARM Coresight | AMBA BUS | Cache 与 MMU/MPU | CoreLink | GCC | CSH 专栏导读】

1. ARM Coresight(SoC-400/SoC-600) 专栏 2. ARMv8/v9 CPU/Cache 专栏 3. Linux ARM AMBA 总线 专栏 4. Trace32/DS-5 专栏。。。

CodingCos的博客 8241

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Vue 3 入门教程

Vue 3 入门教程

sky学linux的博客 676

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

vue笔记

监听字符串、数字、布尔值等简单数据类型时,直接在watch中定义与数据同名的属性,属性值为处理函数(接收两个参数:新值newVal和旧值oldValdata() {return {username: '', // 简单数据age: 18},watch: {// 监听 username 的变化console.log('用户名从', oldVal, '变成了', newVal);},// 监听 age 的变化。

2301_79775040的博客 4290

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Vue3复习笔记

Vue3复习笔记,把以前没注意到的细节和不太熟悉的都写在里面了,后续学到新知识还会添加

qq_52845451的博客 2181

Vue前端面试核心考点与实战解析

Vue.js作为现代前端开发的主流框架,其核心机制如响应式系统和虚拟DOM是面试中的高频考点。响应式系统通过依赖收集和触发更新实现数据绑定,而虚拟DOM则通过高效的diff算法优化渲染性能。这些技术不仅提升了开发效率,还广泛应用于单页应用(SPA)和复杂业务系统的构建。在工程实践中,合理使用Vue的生命周期钩子和组件通信方案能显著提升代码质量。本文结合Vue3的组合式API和Pinia状态管理,深入解析如何应对企业级开发中的性能优化和架构设计挑战,帮助开发者掌握从原理到实战的完整知识体系。

weixin_34099526的博客 318

Vue+TypeScripts 尚硅谷vue3教程学习笔记

Vue 3 是 Vue.js 框架的一次重大升级,于 2020 年 9 月 18 日正式发布,代号为“One Piece(海贼王)”。作为新一代的前端构建框架,它在性能、源码架构、开发体验以及生 态支持上进行了全面的革新,旨在为开发者提供更高效、更灵活的开发体验。核心特性与优势Vue 3 在底层进行了大量优化,使得应用运行更加流畅。其打包体积减少了 41%,初次渲染速度提升了 55%,更新渲染速度提升了 133%,同时内存占用减少了 54%。

weixin_63108234的博客 251

Vue 完整版系统知识文档

《Vue全栈开发实战手册》摘要 本手册系统整合Vue2/Vue3全栈知识体系,涵盖基础语法、组件开发、状态管理、工程化等核心内容,适合从入门到精通的完整学习路径。主要特点: 基础核心 详解MVVM架构和响应式原理(Vue2的Object.defineProperty vs Vue3的Proxy) 完整模板语法规则与16种内置指令解析 组件系统核心:通信机制(8种方案)、插槽、动态组件、递归组件 进阶实战 状态管理:Vuex/Pinia完整解决方案 路由开发:动态路由、权限控制、懒加载 工程化:Webpack

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 402

vue3的知识点梳理

Composition API (setup):逻辑按功能聚合,复用性强,TS友好。:模板允许多根节点,不再必须一个根 div;:传送门,把模板 DOM 渲染到组件 DOM 树之外(body 下,弹窗、浮层):处理异步组件,等待异步组件加载,显示 fallback 占位。options API:选项式,代码分散,大型项目难维护。toRefs:批量解构对象所有属性,解构后不丢失响应式。toRef:单独提取对象一个属性,保持响应式。markRaw:标记对象,永远不做响应式代理。

weixin_47151361的博客 175

Vue3零基础5小时学习路线:从环境搭建到项目实战

前端开发中,Vue.js 一直是构建用户界面的人气框架,而 Vue3 带来的组合式 API、响应式重构和工程化升级,更是将组件化开发推向新阶段。对于刚接触 Vue3 的开发者而言,理解 ref、reactive 等响应式数据的差异,掌握 setup 组织逻辑的方法,是迈入现代前端开发的必备基础。组合式 API 不仅提升了代码复用率,也让状态管理、路由和接口请求在项目中的协作更加清晰。在实际应用场景中,使用 Pinia 管理全局状态,通过 Vue Router 配置页面导航,并用 Axios 统一处理网络请求

weixin_33826609的博客 568

UniApp 开发从入门到精通

《UniApp开发从入门到精通》不仅是一份学习指南,更是一份帮助您从入门到精通的成长地图。通过系统的学习和实践,您将掌握了 UniApp 的核心知识和开发技巧,并具备了独立开发多端应用的能力。

YunWisdom 5318

关于vue3生命周期的使用、了解以及用途(详细版)

每一个Vue组件实例在创建时都需要经历一系列的初始化步骤,比如数据侦听,编译模板,挂载实例到DOM,以及在数据改变时更新DOM。在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码。最常用的是created、mounted、updated和unmounted。可以监听某一类型的改变而执行某项操作。跟vue2并没有太多不同之处Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。

老余的博客 1万+

vue3生命周期

10.onDeactivated()-----若组件实例是 缓存树的一部分,当组件从 DOM 中被移除时调用。9.onActivated()-----若组件实例是 缓存树的一部分,当组件被插入到 DOM 中时调用。6.onBeforeUnmount()-----在组件实例被卸载之前调用。2.onBeforeMount()-----在组件被挂载之前被调用。7.onUnmounted()-----在组件实例被卸载之后调用。1.setup()-----在。

weixin_43962020的博客 760
上一篇: vue3+vite-plugin-pwa实现PWA demo
下一篇: vue3项目兼容信创环境处理
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值