Skip to main content

コンポーネントはイベントを発信することもできます。そのためには、イベントディスパッチャを作成する必要があります。Inner.svelte を更新してください。

Inner.svelte
<script>
	import { createEventDispatcher } from 'svelte';

	const dispatch = createEventDispatcher();

	function sayHello() {
		dispatch('message', {
			text: 'Hello!'
		});
	}
</script>

createEventDispatcher はコンポーネントを最初にインスタンス化するときに呼び出す必要があります。(後から setTimeout のコールバックなどの内側で呼び出すことはできません。)これにより dispatch をコンポーネントインスタンスに関連づけます。

それから、App.svelteon:message ハンドラを追加します:

App.svelte
<Inner on:message={handleMessage} />

イベント名を別の名前に変更してみることもできます。例えば、Inner.sveltedispatch('message', {...})dispatch('greet', {...}) に変更し、App.svelte の属性名を on:message から on:greet に変更します。

Next: Event forwarding

1
2
3
4
5
6
7
8
9
10
<script>
	import Inner from './Inner.svelte';
 
	function handleMessage(event) {
		alert(event.detail.text);
	}
</script>
 
<Inner />
 
initialising