Fetching Data
นักพัฒนา React ใช้ useEffect + fetch เพื่อดึงข้อมูล client-side หรือใช้ React Query / SWR เพื่อจัดการ caching และ loading state Svelte ใช้ onMount + fetch สำหรับ client-side fetching ด้วย API ที่ตรงไปตรงมากว่า สำหรับ server-side fetching SvelteKit มีฟังก์ชัน load ใน +page.ts ที่รันบน server และส่งข้อมูลให้ component โดยตรง — คล้ายกับ getServerSideProps ของ Next.js แต่ clean กว่ามาก
useEffect + fetch เทียบกับ onMount + fetch
หัวข้อที่มีชื่อว่า “useEffect + fetch เทียบกับ onMount + fetch”function UserProfile({ userId }) { const [user, setUser] = React.useState(null); const [loading, setLoading] = React.useState(true); const [error, setError] = React.useState(null);
React.useEffect(() => { setLoading(true); fetch(`/api/users/${userId}`) .then(r => r.json()) .then(data => { setUser(data); setLoading(false); }) .catch(err => { setError(err.message); setLoading(false); }); }, [userId]);
if (loading) return <p>Loading...</p>; if (error) return <p>Error: {error}</p>; return <p>{user?.name}</p>;}<script> import { onMount } from 'svelte';
let { userId } = $props(); let user = $state(null); let loading = $state(true); let error = $state(null);
onMount(async () => { try { const res = await fetch(`/api/users/${userId}`); user = await res.json(); } catch (e) { error = e.message; } finally { loading = false; } });</script>
{#if loading}<p>Loading...</p>{:else if error}<p>Error: {error}</p>{:else}<p>{user?.name}</p>{/if}getServerSideProps เทียบกับ SvelteKit load
หัวข้อที่มีชื่อว่า “getServerSideProps เทียบกับ SvelteKit load”// pages/users/[id].tsx (Next.js)export async function getServerSideProps({ params }) { const user = await fetchUser(params.id); return { props: { user } };}
export default function UserPage({ user }) { return <p>{user.name}</p>;}// +page.ts (SvelteKit)export async function load({ params, fetch }) { const res = await fetch(`/api/users/${params.id}`); const user = await res.json(); return { user };}
<!-- +page.svelte --><script> let { data } = $props();</script>
<p>{data.user.name}</p>