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

Props

ใน React คุณรับ props เข้ามาเป็น argument ของ function แล้ว destructure ตรง parameter list ส่วนใน Svelte 5 คุณเรียก rune $props() แล้ว destructure ผลลัพธ์ที่ได้ — รูปแบบเกือบจะเหมือนกันเป๊ะ ดังนั้นการแมปในหัวจึงเกิดขึ้นแทบจะทันที

React
// Badge.jsx
function Badge({ label, count = 0, color = 'blue' }) {
return (
<span style={{ color }}>
{label}: {count}
</span>
);
}
export default Badge;
Svelte
<!-- Badge.svelte -->
<script>
let { label, count = 0, color = 'blue' } = $props();
</script>
<span style="color: {color}">
{label}: {count}
</span>

syntax การ destructure นั้น เหมือนกัน ค่า default ก็ทำงานแบบเดียวกัน ความต่างเดียวคือต้นทาง: React ใช้ argument ของ function ส่วน Svelte ใช้ $props()

ถ้าคุณอยากส่งต่อ attribute ที่ไม่รู้จักไปยัง DOM element (เช่น สำหรับ wrapper component) ก็ spread ส่วนที่เหลือออกไป:

React
function Button({ children, ...rest }) {
return <button {...rest}>{children}</button>;
}
Svelte
<script>
let { children, ...rest } = $props();
</script>
<button {...rest}>
{@render children?.()}
</button>

ลองแก้ค่า default ในการ destructure $props() ดู แล้วจะเห็น output เปลี่ยนทันที

คุณประกาศ prop พร้อมค่า default ใน Svelte 5 อย่างไร?
$props() คืนค่าอะไรออกมา?
คุณส่งต่อ props ที่ไม่รู้จักทั้งหมดไปยัง DOM element ใน Svelte 5 อย่างไร?