Skip to main content

DOM 要素のプロパティにバインドできるのと同様に、コンポーネントの props にもバインドできます。例えば、フォーム要素のように <Keypad> コンポーネントの value prop にバインドすることができます。

まず、prop を (バインド可能)bindable なものとしてマークする必要があります。Keypad.svelte の中で、$props() 宣言で $bindable Rune を使用するように更新します:

Keypad
let { value = $bindable(''), onsubmit } = $props();

それから、App.sveltebind: ディレクティブを追加します:

App
<Keypad bind:value={pin} {onsubmit} />

これで、ユーザがキーパッドを操作すると、親コンポーネントの pin の値が即座に更新されるようになりました。

コンポーネントバインディングは控えめに使用してください。それらが多すぎるとアプリケーションの周りのデータの流れを追跡するのが困難になります。特に「信頼できる唯一の情報源(single source of truth)」が存在しない場合には。

Edit this page on GitHub

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script>
	import Keypad from './Keypad.svelte';
 
	let pin = $state('');
 
	let view = $derived(pin
		? pin.replace(/\d(?!$)/g, '•')
		: 'enter your pin');
 
	function onsubmit() {
		alert(`submitted ${pin}`);
	}
</script>
 
<h1 style="opacity: {pin ? 1 : 0.4}">
	{view}
</h1>
 
<Keypad {onsubmit} />