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

vue3中defineEmits的使用说明

一、基本用法

  1. 声明事件
    使用 defineEmits 定义组件可触发的事件,返回一个 emit 函数用于触发事件:

    vue

    <script setup>
    const emit = defineEmits(['submit', 'update:value'])
    </script>
const emit = defineEmits(["update:modelValue"]);
  1. 触发事件
    在需要的地方调用 emit(eventName, ...args)

    javascript

    function handleSubmit() {emit('submit', { data: 'example' })
    }

二、类型检查(TypeScript)

通过泛型参数定义事件签名,增强类型安全:

vue

<script setup lang="ts">
const emit = defineEmits<{(e: 'submit', payload: { data: string }): void(e: 'update:value', id: number): void
}>()
</script>

或使用更简洁的语法(Vue 3.3+)

typescript

defineEmits<{submit: [payload: { data: string }]'update:value': [id: number]
}>()
const emit = defineEmits<{"update:modelValue": [value: ApplyBasicInfo];
}>();

三、示例场景

1. 表单提交

vue

<script setup>
const emit = defineEmits(['submit'])function onSubmit() {emit('submit', { username: 'user', password: 'pass' })
}
</script><template><form @submit.prevent="onSubmit"><!-- 表单内容 --></form>
</template>
2. 更新父组件状态

vue

<script setup>
const emit = defineEmits(['update:count'])function increment() {emit('update:count', 10) // 通知父组件更新 count
}
</script>

四、注意事项

  1. 命名规范
    建议使用 kebab-case(如 update:value),因 HTML 属性不区分大小写。

  2. 验证事件参数
    可在 defineEmits 中定义类型(TypeScript)或在 Options API 的 emits 选项添加验证函数:

    javascript

    // Options API 验证
    emits: {submit: (payload) => !!payload.data
    }
  3. 与 Options API 对比

    • <script setup> 中用 defineEmits 替代 emits 选项。

    • 类型推断更直观,适合 TypeScript。

  4. 无 <script setup> 时的用法
    需改用 Options API 的 emits 选项:

    javascript

    export default {emits: ['submit'],setup(props, { emit }) {// 使用 emit('submit')}
    }

五、总结

  • defineEmits 用于在组合式 API 中声明组件事件。

  • 通过类型泛型(TS)或数组(JS)定义事件列表。

  • 触发事件:emit('event-name', payload)

  • 优势:明确的类型检查和更好的代码可维护性。

相关文章:

  • C++中const的不同使用方法和意义
  • 初识Redis · 命令、数据结构补充、协议
  • 订阅应用 TikTok 广告实用指南
  • 电子电器架构 --- 下一代汽车电子/电气(E/E)架构
  • 长亭2月公开赛Web-ssrfme
  • 智能体数据分析
  • 【JAVA】基础知识“抽象类”详解,从入门到理解~
  • Redis Hash 介绍
  • HttpSessionListener 的用法笔记250417
  • Pikachu靶场-CSRF
  • DSO:牛津大学推出的物理一致性3D模型优化框架
  • ubuntu 查看现在服务使用的端口
  • 签到功能---实现签到接口
  • Unity基于屏幕空间的鼠标拖动,拖动物体旋转
  • 强化学习算法系列(五):最主流的算法框架——Actor-Critic算法框架
  • 论文阅读VACE: All-in-One Video Creation and Editing
  • 用Python Pandas高效操作数据库:从查询到写入的完整指南
  • 音视频相关协议和技术内容
  • 智能体开发的范式革命:Cangjie Magic全景解读与实践思考
  • 游戏盾和高防ip有什么区别
  • 比特币价格重返10万美元,哪些因素使然?
  • 聆听百年唐调正声:唐文治王蘧常吟诵传习的背后
  • 马上评丨维护学术诚信别陷入“唯AI检测”误区
  • 马上评丨行人转身相撞案:走路该保持“安全距离”吗
  • 保利42.41亿元竞得上海杨浦东外滩一地块,成交楼面单价超8万元
  • 国家发改委:目前有的核电项目民间资本参股比例已经达到20%