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

Template Blocks

React render conditional และ list ด้วย JavaScript ล้วน ๆ: ternary, && และ .map() ภายใน JSX ส่วน Svelte มี template block syntax — control-flow tag เฉพาะที่อยู่ใน markup ใกล้เคียงกับวิธีทำงานของภาษา HTML templating อย่าง Handlebars หรือ Jinja มากกว่า

React
function Status({ loggedIn }) {
return (
<div>
{loggedIn
? <p>Welcome back!</p>
: <p>Please log in.</p>}
</div>
);
}
Svelte
<script>
let { loggedIn } = $props();
</script>
{#if loggedIn}
<p>Welcome back!</p>
{:else}
<p>Please log in.</p>
{/if}

คุณยังเพิ่ม branch {:else if condition} ได้เหมือนกับ else if ใน JavaScript เป๊ะ ๆ

React
function FruitList({ fruits }) {
return (
<ul>
{fruits.map((fruit, i) => (
<li key={i}>{fruit}</li>
))}
</ul>
);
}
Svelte
<script>
let { fruits } = $props();
</script>
<ul>
{#each fruits as fruit, i (i)}
<li>{fruit}</li>
{/each}
</ul>

ตัว (i) ที่อยู่ท้ายสุดคือ keying expression — เทียบเท่ากับ prop key ของ React ควรใช้ ID ที่ไม่ซ้ำและคงที่เมื่อมีให้ใช้ (อย่าใช้ index)

React
function UserCard({ userId }) {
const [user, setUser] = React.useState(null);
React.useEffect(() => {
fetch('/api/users/' + userId)
.then(r => r.json())
.then(setUser);
}, [userId]);
if (!user) return <p>Loading...</p>;
return <p>{user.name}</p>;
}
Svelte
<script>
let { userId } = $props();
let promise = fetch('/api/users/' + userId).then(r => r.json());
</script>
{#await promise}
<p>Loading...</p>
{:then user}
<p>{user.name}</p>
{:catch error}
<p>Error: {error.message}</p>
{/await}
อะไรคือสิ่งที่เทียบเท่ากับ array .map() ของ React สำหรับ render list ใน Svelte 5?
คุณใส่ key ให้ list item ในบล็อก {#each} ของ Svelte อย่างไร?
บล็อกไหนของ Svelte ที่จัดการ Promise พร้อมสถานะ loading, success และ error?
คุณเพิ่ม branch else-if ในบล็อก {#if} ของ Svelte อย่างไร?