Skip to content

Commit 584b56a

Browse files
authored
docs: added events as props and typing with object based emits (#1704)
1 parent 257105e commit 584b56a

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

src/guide/components/events.md

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ if (typeof window !== 'undefined') {
1717
}
1818
}
1919
</script>
20+
2021
# コンポーネントのイベント {#component-events}
2122

2223
> このページは、すでに[コンポーネントの基礎](/guide/essentials/component-basics)を読んでいることを前提にしています。初めてコンポーネントに触れる方は、まずそちらをお読みください。
@@ -176,15 +177,15 @@ export default {
176177

177178
</div>
178179

179-
`emits` オプションと `defineEmits()` マクロはオブジェクト構文もサポートしており、発行されたイベントのペイロードのランタイムバリデーションを実行できます:
180+
`emits` オプションと `defineEmits()` マクロはオブジェクト構文もサポートしています。TypeScript を使用している場合は引数の型付けができ、発行されるイベントのペイロードのランタイムバリデーションを実行できます:
180181

181182
<div class="composition-api">
182183

183184
```vue
184185
<script setup>
185186
const emit = defineEmits({
186-
submit(payload) {
187-
// バリデーションの合格/不合格を示す
187+
submit(payload: { email: string, password: string }) {
188+
// バリデーションの合格/不合格を示すための
188189
// `true` または `false` を返す
189190
}
190191
})
@@ -210,8 +211,8 @@ const emit = defineEmits<{
210211
```js
211212
export default {
212213
emits: {
213-
submit(payload) {
214-
// バリデーションの合格/不合格を示す
214+
submit(payload: { email: string, password: string }) {
215+
// バリデーションの合格/不合格を示すための
215216
// `true` または `false` を返す
216217
}
217218
}
@@ -287,3 +288,15 @@ export default {
287288
```
288289

289290
</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')` を使用することを推奨します。

src/guide/typescript/composition-api.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,18 @@ export default defineComponent({
143143
// 実行時の宣言
144144
const emit = defineEmits(['change', 'update'])
145145
146+
// オプションベースの宣言
147+
const emit = defineEmits({
148+
change: (id: number) => {
149+
// バリデーションの合格/不合格を示すための
150+
// `true` または `false` を返す
151+
},
152+
update: (value: string) => {
153+
// バリデーションの合格/不合格を示すための
154+
// `true` または `false` を返す
155+
}
156+
})
157+
146158
// 型ベースの宣言
147159
const emit = defineEmits<{
148160
(e: 'change', id: number): void

0 commit comments

Comments
 (0)