@@ -17,6 +17,7 @@ if (typeof window !== 'undefined') {
17
17
}
18
18
}
19
19
</script >
20
+
20
21
# コンポーネントのイベント {#component-events}
21
22
22
23
> このページは、すでに[ コンポーネントの基礎] ( /guide/essentials/component-basics ) を読んでいることを前提にしています。初めてコンポーネントに触れる方は、まずそちらをお読みください。
@@ -176,15 +177,15 @@ export default {
176
177
177
178
</div >
178
179
179
- ` emits ` オプションと ` defineEmits() ` マクロはオブジェクト構文もサポートしており、発行されたイベントのペイロードのランタイムバリデーションを実行できます :
180
+ ` emits ` オプションと ` defineEmits() ` マクロはオブジェクト構文もサポートしています。TypeScript を使用している場合は引数の型付けができ、発行されるイベントのペイロードのランタイムバリデーションを実行できます :
180
181
181
182
<div class =" composition-api " >
182
183
183
184
``` vue
184
185
<script setup>
185
186
const emit = defineEmits({
186
- submit(payload) {
187
- // バリデーションの合格/不合格を示す
187
+ submit(payload: { email: string, password: string } ) {
188
+ // バリデーションの合格/不合格を示すための
188
189
// `true` または `false` を返す
189
190
}
190
191
})
@@ -210,8 +211,8 @@ const emit = defineEmits<{
210
211
``` js
211
212
export default {
212
213
emits: {
213
- submit (payload ) {
214
- // バリデーションの合格/不合格を示す
214
+ submit (payload : { email : string, password : string } ) {
215
+ // バリデーションの合格/不合格を示すための
215
216
// `true` または `false` を返す
216
217
}
217
218
}
@@ -287,3 +288,15 @@ export default {
287
288
```
288
289
289
290
</div >
291
+
292
+ ## props としてのイベント {#events-props}
293
+
294
+ 大文字のイベント名の前に ` on ` を付けることで、イベントを ` props ` として宣言して渡すこともできます。
295
+
296
+ ` props.onEvent ` を使用するのと ` emit('event') ` を使用するのでは動作が異なります。前者はプロパティベースのリスナー(` @event ` または ` :on-event ` )のみを処理します。
297
+
298
+ ::: warning
299
+ もし ` :onEvent ` と ` @event ` の両方が渡された場合、` props.onEvent ` は「関数」ではなく「関数の配列」になる可能性があります。この動作は安定しておらず、将来変更される可能性があります。
300
+ :::
301
+
302
+ このため、イベントを発行するときには ` props.onEvent ` の代わりに ` emit('event') ` を使用することを推奨します。
0 commit comments