Bird
Raised Fist0
Svelteframework~10 mins

Action update and destroy in Svelte - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a Svelte action that logs when an element is mounted.

Svelte
function logAction(node) {
  console.log('Element mounted');
  return {
    [1]() {
      console.log('Element removed');
    }
  };
}
Drag options to blanks, or click blank then click option'
Aremove
Bupdate
Cinit
Ddestroy
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'update' instead of 'destroy' for cleanup.
Using a non-existent method like 'remove'.
2fill in blank
medium

Complete the code to update the action when the parameter changes.

Svelte
function colorAction(node, color) {
  node.style.color = color;
  return {
    [1](newColor) {
      node.style.color = newColor;
    }
  };
}
Drag options to blanks, or click blank then click option'
Achange
Bdestroy
Cupdate
Drefresh
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'destroy' instead of 'update' to handle parameter changes.
Using non-standard method names like 'change' or 'refresh'.
3fill in blank
hard

Fix the error in the action to properly clean up when the element is removed.

Svelte
function focusAction(node) {
  node.focus();
  return {
    [1]() {
      node.blur();
    }
  };
}
Drag options to blanks, or click blank then click option'
Adestroy
Bupdate
Ccleanup
Dremove
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'update' for cleanup instead of 'destroy'.
Using non-existent methods like 'cleanup' or 'remove'.
4fill in blank
hard

Fill both blanks to create an action that updates color and cleans up style on destroy.

Svelte
function styleAction(node, color) {
  node.style.color = color;
  return {
    [1](newColor) {
      node.style.color = newColor;
    },
    [2]() {
      node.style.color = '';
    }
  };
}
Drag options to blanks, or click blank then click option'
Aupdate
Bdestroy
Cremove
Dreset
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping the roles of update and destroy methods.
Using non-standard method names like 'remove' or 'reset'.
5fill in blank
hard

Fill all three blanks to create an action that sets font size, updates it, and cleans up on destroy.

Svelte
function fontSizeAction(node, size) {
  node.style.fontSize = [1];
  return {
    [2](newSize) {
      node.style.fontSize = newSize;
    },
    [3]() {
      node.style.fontSize = '';
    }
  };
}
Drag options to blanks, or click blank then click option'
Asize
Bupdate
Cdestroy
DfontSize
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect variable names for the size.
Mixing up update and destroy method names.

Practice

(1/5)
1. What is the main purpose of the destroy function in a Svelte action?
easy
A. To update the element's attributes when parameters change
B. To initialize the action when the element is created
C. To clean up resources when the element is removed from the DOM
D. To render the element on the page

Solution

  1. Step 1: Understand the role of destroy in Svelte actions

    The destroy function is called when the element using the action is removed from the DOM to clean up any side effects or event listeners.
  2. Step 2: Differentiate from other lifecycle functions

    update handles parameter changes, and initialization happens in the main action function, not in destroy.
  3. Final Answer:

    To clean up resources when the element is removed from the DOM -> Option C
  4. Quick Check:

    destroy cleans up on removal = A [OK]
Hint: Destroy cleans up when element leaves the page [OK]
Common Mistakes:
  • Confusing destroy with update
  • Thinking destroy initializes the action
  • Assuming destroy runs on parameter change
2. Which of the following is the correct syntax for returning an update and destroy function from a Svelte action?
easy
A. return [ update(params) {}, destroy() {} ];
B. return { update: (params) => {}, destroy: () => {} };
C. return function update(params) {}, function destroy() {};
D. return { onUpdate: () => {}, onDestroy: () => {} };

Solution

  1. Step 1: Recall the Svelte action return structure

    A Svelte action returns an object with optional update and destroy methods as properties.
  2. Step 2: Match the correct syntax

    return { update: (params) => {}, destroy: () => {} }; correctly returns an object with update and destroy as arrow functions. Other options use invalid syntax or wrong property names.
  3. Final Answer:

    return { update: (params) => {}, destroy: () => {} }; -> Option B
  4. Quick Check:

    Return object with update and destroy keys = B [OK]
Hint: Return an object with update and destroy keys [OK]
Common Mistakes:
  • Using arrays instead of objects
  • Wrong function syntax inside return
  • Using incorrect property names like onUpdate
3. Given this Svelte action code:
function highlight(node, color) {
  node.style.backgroundColor = color;
  return {
    update(newColor) {
      node.style.backgroundColor = newColor;
    },
    destroy() {
      node.style.backgroundColor = '';
    }
  };
}

What happens when the action's parameter changes from 'yellow' to 'lightblue'?
medium
A. The background color changes to 'lightblue'
B. The background color resets to empty string
C. Nothing changes because update is not called
D. The action throws an error

Solution

  1. Step 1: Understand the update function role

    The update method runs when the action's parameter changes, here it sets the background color to the new value.
  2. Step 2: Trace the parameter change effect

    Changing from 'yellow' to 'lightblue' triggers update, which sets node.style.backgroundColor to 'lightblue'.
  3. Final Answer:

    The background color changes to 'lightblue' -> Option A
  4. Quick Check:

    Parameter change triggers update = D [OK]
Hint: Update runs on parameter change to update styles [OK]
Common Mistakes:
  • Thinking destroy runs on parameter change
  • Assuming update does nothing
  • Confusing initial setup with update
4. Identify the error in this Svelte action code:
function logClicks(node) {
  function handleClick() {
    console.log('Clicked');
  }
  node.addEventListener('click', handleClick);
  return {
    update() {
      node.removeEventListener('click', handleClick);
    }
  };
}
medium
A. The update function incorrectly removes the event listener on every parameter change
B. The handleClick function is not defined properly
C. The event listener is added multiple times causing duplicates
D. The destroy function is missing to remove the event listener on element removal

Solution

  1. Step 1: Analyze the event listener management

    The action adds a click listener but does not clean it up when the element is removed.
  2. Step 2: Check lifecycle methods usage

    There is no destroy method to remove the listener on element removal, which can cause memory leaks.
  3. Final Answer:

    The destroy function is missing to remove the event listener on element removal -> Option D
  4. Quick Check:

    Missing destroy cleanup = C [OK]
Hint: Always clean event listeners in destroy [OK]
Common Mistakes:
  • Removing listeners in update instead of destroy
  • Not removing listeners at all
  • Confusing update with destroy lifecycle
5. You want to create a Svelte action that changes an element's text color based on a parameter and logs a message when the element is removed. Which code correctly implements update and destroy?
hard
A. function colorText(node, color) { node.style.color = color; return { update(newColor) { node.style.color = newColor; }, destroy() { console.log('Element removed'); } }; }
B. function colorText(node, color) { node.style.color = color; return { update() { console.log('Color updated'); }, destroy() { node.style.color = ''; } }; }
C. function colorText(node, color) { node.style.color = color; return { update(newColor) { node.style.backgroundColor = newColor; }, destroy() { console.log('Element removed'); } }; }
D. function colorText(node, color) { node.style.color = color; return { update(newColor) { node.style.color = newColor; } }; }

Solution

  1. Step 1: Check update function correctness

    The update method should take a newColor parameter and set node.style.color = newColor.
  2. Step 2: Verify destroy function behavior

    The destroy method should console.log('Element removed').
  3. Final Answer:

    function colorText(node, color) { node.style.color = color; return { update(newColor) { node.style.color = newColor; }, destroy() { console.log('Element removed'); } }; } -> Option A
  4. Quick Check:

    Update changes color, destroy logs message = A [OK]
Hint: Update changes style, destroy cleans or logs [OK]
Common Mistakes:
  • Updating wrong style property
  • Missing destroy method
  • Destroy resets style instead of logging
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