首页 > 其他分享 >vue3 setup函数 有哪些参数,props、{attrs,slots,emit}等

vue3 setup函数 有哪些参数,props、{attrs,slots,emit}等

时间:2025-01-20 22:34:59浏览次数:1  
标签:setup vue3 attrs context props 组件 slots

在 Vue 3 中,setup 函数是 Composition API 的入口点,用于替代传统的 datamethodscomputed 等选项。setup 函数可以接收两个参数:propscontext。下面详细解释这两个参数及其用途。

setup 函数签名

import { SetupContext } from 'vue';

export default {
  props: {
    // 定义组件的 props
  },
  setup(props: {}, context: SetupContext) {
    // 在这里使用 props 和 context
  }
};

参数详解

1. props

props 是一个对象,包含了传递给组件的所有属性(props)。这些属性可以在 setup 函数中直接使用,并且它们是响应式的(reactive)。

  • 类型:根据你在组件中定义的 props 类型来确定。

  • 示例

    export default {
      props: {
        message: String,
        count: Number
      },
      setup(props) {
        console.log(props.message); // 输出传递给组件的 message prop
        console.log(props.count);   // 输出传递给组件的 count prop
      }
    };
    
  • 注意事项

    • props 是只读的,不能直接修改。
    • 如果需要对 props 进行转换或派生新的值,可以使用 computed 或者其他响应式机制。

2. context

context 是一个包含组件上下文信息的对象。它提供了几个有用的属性和方法,帮助你更好地管理组件的行为。

  • 类型SetupContext

  • 属性

    • attrs:包含所有未声明为 props 的属性(即 $attrs),通常用于非 props 的 DOM 属性。
    • slots:包含插槽内容,类似于 this.$slots
    • emit:一个函数,用于触发自定义事件,类似于 this.$emit
  • 示例

    export default {
      props: {
        title: String
      },
      setup(props, context) {
        // 访问 attrs
        console.log(context.attrs.class); // 输出传递给组件但未声明为 props 的 class 属性
    
        // 访问 slots
        const defaultSlot = context.slots.default ? context.slots.default() : null;
        console.log(defaultSlot); // 输出默认插槽的内容
    
        // 触发自定义事件
        context.emit('customEvent', 'some data');
      }
    };
    

完整示例

以下是一个完整的示例,展示了如何在 setup 函数中使用 propscontext

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="handleClick">Click Me</button>
    <slot></slot>
  </div>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue';

export default defineComponent({
  props: {
    message: {
      type: String,
      required: true
    }
  },
  setup(props, context) {
    // 使用 props
    console.log('Message:', props.message);

    // 使用 context
    console.log('Attrs:', context.attrs);
    console.log('Slots:', context.slots.default ? context.slots.default() : null);

    // 创建一个响应式变量
    const count = ref(0);

    // 定义一个事件处理函数
    const handleClick = () => {
      count.value++;
      context.emit('increment', count.value);
    };

    return {
      handleClick,
      count
    };
  }
});
</script>

总结

  • props:包含传递给组件的所有属性,是响应式的并且只读。
  • context:包含组件的上下文信息,包括 attrsslotsemit 方法。

通过理解并合理使用 setup 函数的这两个参数,你可以更灵活地管理组件的状态、属性和事件,从而编写出更加模块化和可维护的代码。

标签:setup,vue3,attrs,context,props,组件,slots
From: https://www.cnblogs.com/jocongmin/p/18682607

相关文章

  • 【大屏可视化】系统(Vue3 + ECharts5)快速实现和应用 ️
    ......
  • vue3.5保证你看得明明白白
    子组件中设置默认属性<template><divclass="child-page"><h1>我是子组件</h1><h3>{{total}}</h3><h3>{{userInfo}}</h3></div></template><scriptsetup>//在<scriptsetup......
  • vue3使用pinia中的actions,需要调用接口的话
    1.Pinia简介Pinia是Vue3推荐的状态管理库,类似于Vuex,但其设计更简单和灵活。使用Pinia的actions来调用接口可以更清晰地管理异步操作和状态变化。2.安装和配置Pinia首先,需要安装Pinia:npminstallpinia​  在项目的入口文件(通常是 main.js或 main.ts)中配置Pinia......
  • Vue3初学之路由
    在Vue3中,路由管理是构建单页面应用(SPA)的关键部分。VueRouter4是Vue3的官方路由管理器,提供了与Vue3的深度集成和一系列新特性。安装VueRouter4npminstallvue-router@4配置路由在项目的src目录下创建一个router文件夹,并在其中创建一个index.js文件......
  • Vue3 自定义Hooks完全指南
    目录1.前言2.什么是Hooks2.1Hooks的定义2.2为什么需要Hooks2.3与Vue2的区别3.Hooks的实现原理3.1响应式系统3.2生命周期集成3.3依赖注入系统4.Hooks的作用与应用场景4.1常见应用场景4.2实际案例分析5.Hooks的优缺点5.1优点5.2缺点6.Hooks的书写规范6......
  • Vue3+TS笔记
    创建工程:npminitvue@latestVue3工程结构在main.js中:引入的vue更轻量,引入vue是一个更精简版的名为createApp的工厂函数import{createApp}from'vue'importAppfrom'./App.vue'createApp(App).mount('#app')vm实例对象上有一个mount方法,不是原型上的$mou......
  • vue3产品实现tinymce编辑器word图片粘贴上传
    要求:开源,免费,技术支持编辑器:TinyMCE需求:复制粘贴word内容图片,图文混排,图片转存前端:vue,vue2-cli,vue3-cli后端:java,jsp,springboot,asp.net,php,asp,.netcore,.netmvc,.netform平台:Windows,macOS,Linux,RedHat,CentOS,Ubuntu,中标麒麟,银河麒麟,统信UOS,信创国产......
  • 请说明 Vue 3 中的 setup() 函数的作用及其用法
    深入理解Vue3中的setup()函数在Vue3中,性能和可维护性得到了显著提升,其中最引人注目的变化之一就是引入了CompositionAPI,而setup()函数则是这一API的核心部分。本文将深入探讨setup()函数的作用及其用法,帮助您理解如何在Vue3中更高效地组织和管理组件逻......
  • Cesium+Vue3教程(004):基于Vue3的Cesium添加地形和自定义地形
    文章目录03-添加地形与自定义地形添加地形添加水纹和光照效果加载自定义地形03-添加地形与自定义地形添加地形实现代码:constviewer=newCesium.Viewer("cesiumContainer",{terrainProvider:Cesium.createWorldTerrain(......
  • Vue3中使用组合式API通过路由传值详解
    在Vue3中,使用组合式API来传递路由参数是一种常见的需求。VueRouter是Vue.js的官方路由管理工具,可以在不同的场景下通过多种方式传递和接收路由参数。下面将详细讲解几种常见的路由传值方式,并提供相应的代码示例。1.通过路由参数传值(动态路由参数)路由参数是一种最常......