📤 5-2. $emit の書き換え

✅ 要点まとめ


🟥 変換パターン(具体例)

【クラスコンポーネントの $emit 使用例】

// ファイル名: ChildComponent.vue (クラス版)
@Component
export default class ChildComponent extends Vue {
  // ボタンを押したら親にイベント通知
  handleClick() {
    this.$emit('increment', 5); // 5 を渡す
  }
}

<!-- template 部分 -->
<template>
  <button @click="handleClick">+5</button>
</template>


【Composition API (<script setup> 版 + TypeScript)】

<!-- ファイル名: ChildComponent.vue -->
<template>
  <button @click="handleClick">+5</button>
</template>

<script setup lang="ts">
// イベントの型を定義
const emit = defineEmits<{
  (e: 'increment', payload: number): void;
}>();

// クリック時に emit する
const handleClick = () => {
  emit('increment', 5);
};
</script>


🟡 親コンポーネントでの受け取り方(共通)

<!-- ファイル名: ParentComponent.vue -->
<template>
  <!-- 子から increment イベントを受け取る -->
  <ChildComponent @increment="handleIncrement" />
</template>

<script setup lang="ts">
import ChildComponent from './ChildComponent.vue';

const handleIncrement = (payload: number) => {
  console.log('受け取った値:', payload);
};
</script>


🟢 変換表(まとめ)

クラスコンポーネント Composition API (<script setup>)
this.$emit('eventName', payload) emit('eventName', payload)
イベント名のミスが気づきにくい defineEmits<>() で型チェックできる
引数の型が自動ではわからない TypeScript で明示的に型を書くので安心