Bird
Raised Fist0
Svelteframework~5 mins

Use directive syntax in Svelte

Choose your learning style10 modes available
Introduction

Use directive syntax in Svelte to add special behavior to HTML elements easily. It helps you control how elements work without writing extra JavaScript.

When you want to show or hide content based on a condition.
When you need to run code when an event happens, like a button click.
When you want to loop over a list and create repeated elements.
When you want to bind a variable to an input field to keep data in sync.
Syntax
Svelte
{#directive} ... {/directive}

or

<element on:event={handler}>

or

<input bind:value={variable}>

Directives start with special keywords like {#if}, {#each}, or attributes like on: and bind:.

They make your code cleaner by handling common tasks declaratively.

Examples
Shows the paragraph only if isVisible is true.
Svelte
{#if isVisible}
  <p>Visible content</p>
{/if}
Runs handleClick function when the button is clicked.
Svelte
<button on:click={handleClick}>Click me</button>
Loops over items array and creates a list item for each.
Svelte
{#each items as item}
  <li>{item}</li>
{/each}
Keeps the name variable updated with the input field value.
Svelte
<input bind:value={name} placeholder="Enter your name">
Sample Program

This Svelte component shows a button that counts clicks, a greeting that updates as you type your name, and a list of fruits. It uses on:click to handle clicks, {#if} to conditionally show the greeting, bind:value to sync input with a variable, and {#each} to loop over items.

Svelte
<script>
  let isVisible = true;
  let count = 0;
  let name = '';
  let items = ['Apple', 'Banana', 'Cherry'];

  function handleClick() {
    count += 1;
  }
</script>

<button on:click={handleClick}>Clicked {count} times</button>

{#if isVisible}
  <p>Hello {name || 'guest'}!</p>
{/if}

<input bind:value={name} placeholder="Type your name">

<ul>
  {#each items as item}
    <li>{item}</li>
  {/each}
</ul>
OutputSuccess
Important Notes

Use {#if} and {#each} blocks to control what appears on the page.

Use on:event to listen for user actions like clicks or typing.

Use bind: to keep variables and inputs in sync automatically.

Summary

Use directive syntax to add interactive behavior easily in Svelte.

Directives include {#if}, {#each}, on:, and bind:.

They help keep your code simple and readable.

Practice

(1/5)
1. Which Svelte directive is used to conditionally show content based on a boolean value?
{#if}, {#each}, on:, or bind:?
easy
A. bind:
B. {#if}
C. on:
D. {#each}

Solution

  1. Step 1: Understand the purpose of {#if}

    The {#if} directive in Svelte shows or hides content based on a condition.
  2. Step 2: Compare with other directives

    {#each} loops over lists, on: handles events, and bind: links variables to inputs.
  3. Final Answer:

    {#if} -> Option B
  4. Quick Check:

    Conditional display = {#if} [OK]
Hint: Use {#if} to show/hide content based on true/false [OK]
Common Mistakes:
  • Confusing {#if} with {#each} for loops
  • Using on:click for conditional display
  • Trying to bind variables for conditionals
2. Which of the following is the correct syntax to listen for a click event on a button in Svelte?
easy
A. <button onClick={handleClick}>Click</button>
B. <button click={handleClick}>Click</button>
C. <button on:click={handleClick}>Click</button>
D. <button bind:click={handleClick}>Click</button>

Solution

  1. Step 1: Recall Svelte event directive syntax

    Svelte uses on:eventName={handler} to listen to events like clicks.
  2. Step 2: Check each option

    <button on:click={handleClick}>Click</button> uses on:click correctly. Options A, B, and D use incorrect or invalid syntax.
  3. Final Answer:

    <button on:click={handleClick}>Click</button> -> Option C
  4. Quick Check:

    Event listener syntax = on:event [OK]
Hint: Use on:eventName={handler} to listen for events [OK]
Common Mistakes:
  • Using camelCase like onClick instead of on:click
  • Trying to bind events with bind:
  • Omitting the on: prefix
3. What will be the rendered output of this Svelte code?
<script>
  let items = ['apple', 'banana'];
</script>

<ul>
  {#each items as item}
    <li>{item}</li>
  {/each}
</ul>
medium
A.
  • apple
  • banana
B.
  • items
C.
  • {item}
  • {item}
D. Syntax error

Solution

  1. Step 1: Understand the {#each} directive

    The {#each} directive loops over the array items and assigns each element to item.
  2. Step 2: Render list items

    For each item, it creates a <li> element with the item text inside.
  3. Final Answer:

    <ul><li>apple</li><li>banana</li></ul> -> Option A
  4. Quick Check:

    Loop items render as list =
    • apple
    • banana
    [OK]
Hint: Each loops output list items for each array element [OK]
Common Mistakes:
  • Expecting the literal string {item} to show
  • Confusing the array name with item variable
  • Thinking it causes a syntax error
4. Identify the error in this Svelte snippet:
<script>
  let count = 0;
</script>

<button on:click="count++">Increment</button>
<p>Count: {count}</p>
medium
A. Using double quotes around the event handler expression
B. Missing bind: directive on count variable
C. Incorrect variable name count
D. No error, code works fine

Solution

  1. Step 1: Check event handler syntax

    Svelte requires event handlers to use curly braces without quotes: on:click={count++}.
  2. Step 2: Identify the error

    The code uses quotes around the expression, which causes a syntax error.
  3. Final Answer:

    Using double quotes around the event handler expression -> Option A
  4. Quick Check:

    Event handler must be unquoted expression [OK]
Hint: Use curly braces, not quotes, for event handlers [OK]
Common Mistakes:
  • Putting event handler code inside quotes
  • Trying to bind variables unnecessarily
  • Assuming variable name is wrong
5. You want to create a Svelte component that shows a list of tasks and lets the user toggle each task's completion status by clicking a checkbox. Which directive syntax combination correctly binds the checkbox state and updates the task's done property?
hard
A.
<ul>
  {#each tasks as task}
    <li>
      <input type="checkbox" on:click={task.done = !task.done} /> {task.text}
    </li>
  {/each}
</ul>
B.
<ul>
  {#each tasks as task}
    <li>
      <input type="checkbox" checked={task.done} on:change={() => task.done = !task.done} /> {task.text}
    </li>
  {/each}
</ul>
C.
<ul>
  {#each tasks as task}
    <li>
      <input type="checkbox" bind:value={task.done} /> {task.text}
    </li>
  {/each}
</ul>
D.
<script>
  let tasks = [
    { id: 1, text: 'Task 1', done: false },
    { id: 2, text: 'Task 2', done: true }
  ];
</script>

<ul>
  {#each tasks as task}
    <li>
      <input type="checkbox" bind:checked={task.done} /> {task.text}
    </li>
  {/each}
</ul>

Solution

  1. Step 1: Understand binding checkbox state

    In Svelte, bind:checked links the checkbox's checked state directly to a variable, updating it automatically.
  2. Step 2: Analyze each option

    <script>
      let tasks = [
        { id: 1, text: 'Task 1', done: false },
        { id: 2, text: 'Task 2', done: true }
      ];
    </script>
    
    <ul>
      {#each tasks as task}
        <li>
          <input type="checkbox" bind:checked={task.done} /> {task.text}
        </li>
      {/each}
    </ul>
    uses bind:checked={task.done}, which is correct.
    <ul>
      {#each tasks as task}
        <li>
          <input type="checkbox" checked={task.done} on:change={() => task.done = !task.done} /> {task.text}
        </li>
      {/each}
    </ul>
    manually toggles on change but is more complex.
    <ul>
      {#each tasks as task}
        <li>
          <input type="checkbox" bind:value={task.done} /> {task.text}
        </li>
      {/each}
    </ul>
    uses bind:value which is incorrect for checkboxes.
    <ul>
      {#each tasks as task}
        <li>
          <input type="checkbox" on:click={task.done = !task.done} /> {task.text}
        </li>
      {/each}
    </ul>
    uses on:click without binding, which is less reactive.
  3. Final Answer:

    bind:checked={task.done} -> Option D
  4. Quick Check:

    Checkbox bind:checked updates variable automatically [OK]
Hint: Use bind:checked to sync checkbox with boolean variable [OK]
Common Mistakes:
  • Using bind:value instead of bind:checked for checkboxes
  • Manually toggling state instead of binding
  • Using on:click without reactive binding
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard