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

Data & State — ภาพรวม

React มอบเมนูที่หลากหลายแต่กระจัดกระจาย: useState, useReducer, useContext, useRef, Redux, Zustand, react-query, SWR — แต่ละตัวแก้ปัญหา state คนละส่วน Svelte มีโมเดลเป็นชั้นๆ ที่ครอบคลุมพื้นที่เดียวกันด้วยชิ้นส่วนที่น้อยกว่ามาก:

  • $state — reactive state ระดับ component (แทน useState)
  • $derived — ค่าที่คำนวณและอัปเดตอัตโนมัติ (แทน useMemo)
  • $effect — side effects ที่รันซ้ำเมื่อ dependency เปลี่ยน (แทน useEffect)
  • Svelte stores (writable, readable, derived) — shared state ข้ามคอมโพเนนต์
  • .svelte.ts modules — reactive state ระดับ module นำเข้าได้เหมือน JS module ทั่วไป
  • {#await} — async/loading/error state แบบ declarative ใน markup

โมดูลนี้จะพาไปทีละชั้น เริ่มที่นี่เพื่อดูแผนที่ภาพรวม จากนั้นค่อยดำดิ่งสู่บทเรียนเฉพาะเรื่อง

React
function Counter() {
const [count, setCount] = React.useState(0);
return (
<button onClick={() => setCount(c => c + 1)}>
Count: {count}
</button>
);
}
Svelte
<script>
let count = $state(0);
</script>
<button onclick={() => count++}>
Count: {count}
</button>

ความต่างสำคัญ: ตัวแปร $state คือตัวแปรธรรมดาที่แก้ไขได้โดยตรง ไม่มี setter ไม่ต้องใช้ functional update — แค่ assign ค่าตรงๆ compiler ของ Svelte ติดตามการอ่านและเขียนที่ call site เอง

Svelte 5 rune ตัวใดที่แทน useState ของ React ได้โดยตรง?
Svelte writable store เปรียบได้กับ React pattern ใดมากที่สุด?
บล็อก {#await} ของ Svelte ต่างจากการ track loading state ด้วย useState แบบ manual อย่างไร?