Forms
นักพัฒนา React ใช้ controlled components โดยผูก value กับ state และ onChange สำหรับ update หรือใช้ react-hook-form เพื่อลด boilerplate Svelte ใช้ bind:value แทนทั้ง value= และ onChange= ด้วย directive เดียว — Svelte sync ค่า state กับ input ให้สองทางโดยอัตโนมัติ สำหรับการส่ง form แบบ full-page SvelteKit form actions จัดการ POST server-side เหมือน Remix action ไม่ต้องเขียน API route แยก
controlled input เทียบกับ bind:value
หัวข้อที่มีชื่อว่า “controlled input เทียบกับ bind:value”function LoginForm() { const [email, setEmail] = React.useState(''); const [password, setPassword] = React.useState('');
function handleSubmit(e) { e.preventDefault(); console.log({ email, password }); }
return ( <form onSubmit={handleSubmit}> <input type="email" value={email} onChange={e => setEmail(e.target.value)} placeholder="Email" /> <input type="password" value={password} onChange={e => setPassword(e.target.value)} placeholder="Password" /> <button type="submit">Log in</button> </form> );}<script> let email = $state(''); let password = $state('');
function handleSubmit(e) { e.preventDefault(); console.log({ email, password }); }</script>
<form onsubmit={handleSubmit}> <input type="email" bind:value={email} placeholder="Email" /> <input type="password" bind:value={password} placeholder="Password" /> <button type="submit">Log in</button></form>SvelteKit form actions เทียบกับ onSubmit handler
หัวข้อที่มีชื่อว่า “SvelteKit form actions เทียบกับ onSubmit handler”// pages/login.tsx (Next.js — API route แยก)// pages/api/login.tsexport default function handler(req, res) { const { email, password } = req.body; // ... authenticate res.json({ ok: true });}// +page.server.ts (SvelteKit)export const actions = { default: async ({ request }) => { const data = await request.formData(); const email = data.get('email'); const password = data.get('password'); // ... authenticate return { success: true }; }};
<!-- +page.svelte --><form method="POST"> <input type="email" name="email" /> <input type="password" name="password" /> <button type="submit">Log in</button></form>