State Management & Stores
สองวิธีในการ share state
หัวข้อที่มีชื่อว่า “สองวิธีในการ share state”$state แบบ local ในคอมโพเนนต์ก็พอแล้ว จนกว่าจะมีสองคอมโพเนนต์ที่ไม่ได้เป็น parent กับ child ต้องใช้ข้อมูลชุดเดียวกัน ตอนนั้นคุณต้องการ shared state และ Svelte มีให้สองคำตอบ:
- runes ใน module เอา
$stateไปไว้ในไฟล์.svelte.js/.svelte.tsแล้ว export ออกมา ทุกคอมโพเนนต์ที่ import จะอ่านและเขียนค่า reactive ตัวเดียวกัน นี่คือ default สมัยใหม่ใน Svelte 5 - stores primitive แบบดั้งเดิมของ Svelte: object ที่มี method
subscribeโดยมีwritable,readableและderivedจากsvelte/storeครอบคลุมงานส่วนใหญ่ และ syntax$storeจะ auto-subscribe ให้ในคอมโพเนนต์ ยังรองรับเต็มที่ — และ contract ที่อยู่เบื้องหลังคือสิ่งที่ทำให้ Svelte ทำงานร่วมกับอะไรอย่าง RxJS ได้
โมดูลนี้ครอบคลุมอะไรบ้าง
หัวข้อที่มีชื่อว่า “โมดูลนี้ครอบคลุมอะไรบ้าง”| บทเรียน | สิ่งที่จะได้เรียน |
|---|---|
| The store contract | ”store” จริง ๆ คืออะไร: object ใด ๆ ที่มี subscribe |
| Built-in stores | writable, readable, derived และ prefix $ |
| Runes vs stores | การเปลี่ยนแปลงใน Svelte 5 และเมื่อไรควรใช้อะไร |
| Cross-component state | share runed state อย่างปลอดภัย (module, context, SSR) |
flowchart TB q["ต้อง share state ไหม"] --> local["ไม่: local state ในคอมโพเนนต์"] q --> shared["ใช่"] shared --> runes["runes ใน .svelte.js module (default)"] shared --> stores["stores: subscribe contract หรือ interop หรือ code เดิม"]
Svelte 5 ไม่ได้เอา stores ออก — แต่เพิ่มตัวเลือกที่ง่ายกว่าสำหรับเคสส่วนใหญ่ คุณจะได้เรียนทั้งสองอย่าง และที่สำคัญกว่าคือ เมื่อไร ที่แต่ละอย่างเป็นตัวเลือกที่ถูก