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

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

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.js 官方文档 - 插槽
  • Vue.js 官方文档 - 作用域插槽

相关文章:

  • React基础之组件通信
  • Conda 生态系统介绍
  • ARM CM3核 压栈流程
  • 同为科技智能PDU在数据中心场景的应用与解决方案
  • Redis-限流方案
  • GStreamer —— 2.13、Windows下Qt加载GStreamer库后运行 - “教程13:播放控制“(附:完整源码)
  • Unity摄像机跟随物体
  • 冒泡排序的算法实现
  • 基于vue框架的在线考试系统s581n(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 构建一个支持精度、范围和负数的-Vue-数字输入框
  • Vue2-3 优雅的在子组件修改父组件传递过来的v-model
  • 大语言模型从理论到实践(第二版)-学习笔记(绪论)
  • 正则表达式简述
  • BP神经网络终极进化:2025量子增强版Python实现(附元宇宙金融实战)
  • 2025年03月07日Github流行趋势
  • STM32 子设备通过CAN发送数据到主设备
  • git 添加额外的远程仓库 URL
  • 【每日学点HarmonyOS Next知识】Web跨域资源、Web长按菜单、Web拦截请求、禁止录屏、Base64图片宽高
  • WHAT - 前端阻塞场景梳理
  • Hive-优化(语法优化篇)
  • 漳州专业网站建设公司/上海谷歌seo
  • 重新设置wordpress/谷歌网站优化推广
  • 做漫画视频在线观看网站/一个新手如何推销产品
  • 南山商城网站建设找哪家公司比较安全/seo软文是什么意思
  • 开发公司消防未移交物业/郑州seo培训
  • 哪个网站专门做母婴/网址大全名称