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

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 กว่ามาก

React
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>;
}
Svelte
<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}
React
// 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>;
}
Svelte
// +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>
lifecycle function ใดของ Svelte ที่ใกล้เคียงกับ useEffect กับ empty dependency array มากที่สุด?
ฟังก์ชัน load ใน SvelteKit +page.ts ทำหน้าที่อะไร?
ข้อดีของ onMount เหนือ useEffect สำหรับ initial data fetching คืออะไร?