Bindings
React ใช้ controlled input: คุณตั้งค่า value={state} แล้วอัปเดต state เองใน onChange นี่เป็นความตั้งใจ — one-way data flow ทำให้การเปลี่ยน state ชัดเจน ส่วน Svelte มี bind:value สำหรับ two-way binding ที่เชื่อม input กับตัวแปรเข้าด้วยกันโดยอัตโนมัติ ไม่มีอะไรใน React ที่เทียบได้ตรง ๆ — เป็น superpower ของ Svelte จริง ๆ
Text input: controlled เทียบกับ bind:value
หัวข้อที่มีชื่อว่า “Text input: controlled เทียบกับ bind:value”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> </> );}<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 เดียว
Checkbox: bind:checked
หัวข้อที่มีชื่อว่า “Checkbox: bind:checked”function Opt() { const [agreed, setAgreed] = React.useState(false); return ( <label> <input type="checkbox" checked={agreed} onChange={e => setAgreed(e.target.checked)} /> I agree </label> );}<script> let agreed = $state(false);</script>
<label> <input type="checkbox" bind:checked={agreed} /> I agree</label><p>Agreed: {agreed}</p>Select / dropdown
หัวข้อที่มีชื่อว่า “Select / dropdown”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> );}<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>