ข้ามไปยังเนื้อหา

Bindings

React ใช้ controlled input: คุณตั้งค่า value={state} แล้วอัปเดต state เองใน onChange นี่เป็นความตั้งใจ — one-way data flow ทำให้การเปลี่ยน state ชัดเจน ส่วน Svelte มี bind:value สำหรับ two-way binding ที่เชื่อม input กับตัวแปรเข้าด้วยกันโดยอัตโนมัติ ไม่มีอะไรใน React ที่เทียบได้ตรง ๆ — เป็น superpower ของ Svelte จริง ๆ

React
function NameForm() {
const [name, setName] = React.useState('');
return (
<>
<input
value={name}
onChange={e => setName(e.target.value)}
placeholder="Your name"
/>
<p>Hello, {name || 'stranger'}!</p>
</>
);
}
Svelte
<script>
let name = $state('');
</script>
<input bind:value={name} placeholder="Your name" />
<p>Hello, {name || 'stranger'}!</p>

bind:value แทนที่ทั้ง value={name} และ onChange={e => setName(e.target.value)} ด้วย directive เดียว

React
function Opt() {
const [agreed, setAgreed] = React.useState(false);
return (
<label>
<input
type="checkbox"
checked={agreed}
onChange={e => setAgreed(e.target.checked)}
/>
I agree
</label>
);
}
Svelte
<script>
let agreed = $state(false);
</script>
<label>
<input type="checkbox" bind:checked={agreed} />
I agree
</label>
<p>Agreed: {agreed}</p>
React
function Picker() {
const [color, setColor] = React.useState('red');
return (
<select value={color} onChange={e => setColor(e.target.value)}>
<option value="red">Red</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
</select>
);
}
Svelte
<script>
let color = $state('red');
</script>
<select bind:value={color}>
<option value="red">Red</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
</select>
<p>Chosen: {color}</p>
bind:value ใน Svelte ทำอะไร?
คุณใช้ directive ไหน bind checkbox ใน Svelte?
คุณจะทำแบบ bind:value ของ Svelte ให้ได้เหมือนกันใน React อย่างไร?