Events
React คิดค้น synthetic event ขึ้นมาพร้อม handler prop แบบ camelCase (onClick, onChange, onSubmit) ส่วน Svelte 5 ตัด syntax พิเศษพวกนี้ทิ้งไปทั้งหมด — event handler ก็แค่ HTML attribute ตัวพิมพ์เล็ก ชื่อเดียวกับที่ browser ใช้ (onclick, oninput, onsubmit) ถ้าคุณรู้วิธีเขียน attribute onclick ในไฟล์ HTML ธรรมดา คุณก็รู้วิธีใช้ event ของ Svelte แล้ว
Click handler
หัวข้อที่มีชื่อว่า “Click handler”function Counter() { const [count, setCount] = React.useState(0); return ( <button onClick={() => setCount(c => c + 1)}> Count: {count} </button> );}<script> let count = $state(0);</script>
<button onclick={() => count++}> Count: {count}</button>จุดสำคัญ:
- React:
onClick(O ตัวใหญ่ C ตัวใหญ่) ส่วน Svelte 5:onclick(ตัวพิมพ์เล็กทั้งหมด) - React ต้องมี setter function จาก
useStateส่วน Svelte 5 mutate$stateได้ตรง ๆ —count++ก็ใช้ได้เลย - ใน Svelte 5 directive
on:clickแบบเก่าจาก Svelte 4 หายไปแล้ว ให้ใช้onclickตัวพิมพ์เล็กเสมอ
Named handler function
หัวข้อที่มีชื่อว่า “Named handler function”inline arrow function ใช้ได้ดีสำหรับเคสง่าย ๆ แต่ถ้าอยากให้อ่านง่ายขึ้นก็แยกออกมาเป็น named function:
function Form() { const [value, setValue] = React.useState(''); function handleChange(e) { setValue(e.target.value); } return <input value={value} onChange={handleChange} />;}<script> let value = $state(''); function handleInput(e) { value = e.target.value; }</script>
<input {value} oninput={handleInput} />หมายเหตุ: สำหรับ two-way binding ของ input นั้น bind:value สะอาดกว่า (จะพูดถึงในบทเรียน Bindings) ที่ยกแพตเทิร์น named handler มาให้ดูตรงนี้ก็เพราะแมปตรง ๆ กับแพตเทิร์น onChange ของ React
Event object
หัวข้อที่มีชื่อว่า “Event object”คุณเข้าถึง native DOM event ได้เต็มที่ — ไม่มี synthetic wrapper มาครอบ:
function KeyLogger() { const [key, setKey] = React.useState(''); return ( <input onKeyDown={e => setKey(e.key)} placeholder="Press a key" /> );}<script> let key = $state('');</script>
<input onkeydown={e => (key = e.key)} placeholder="Press a key"/>{#if key} <p>Last key: <kbd>{key}</kbd></p>{/if}