Bird
Raised Fist0
Svelteframework~30 mins

Action update and destroy in Svelte - Mini Project: Build & Apply

Choose your learning style10 modes available
Svelte Action with Update and Destroy
📖 Scenario: You are building a simple Svelte app that changes the background color of a box when you hover over it. You want to use a Svelte action that updates the color dynamically and cleans up when the box is removed.
🎯 Goal: Create a Svelte action called hoverColor that changes the background color of an element on mouse enter and resets it on mouse leave. The action should support updating the color dynamically and clean up event listeners when the element is removed.
📋 What You'll Learn
Create a Svelte action function named hoverColor that accepts a node and a color parameter.
Add event listeners for mouseenter and mouseleave inside the action.
Implement the update method to change the color dynamically when the parameter changes.
Implement the destroy method to remove event listeners when the element is removed.
Use the hoverColor action on a <div> with an initial color.
💡 Why This Matters
🌍 Real World
Custom Svelte actions help you add reusable interactive behaviors to elements, like hover effects, tooltips, or drag-and-drop, improving user experience.
💼 Career
Understanding Svelte actions with update and destroy methods is important for building maintainable and efficient Svelte applications in professional frontend development.
Progress0 / 4 steps
1
Create the hoverColor action function
Create a Svelte action function called hoverColor that takes node and color as parameters. Inside, add event listeners for mouseenter and mouseleave that change the node's background color to color on mouse enter and reset it to '' on mouse leave.
Svelte
Hint

Remember to define onMouseEnter and onMouseLeave functions inside the action and add event listeners to the node.

2
Add an update method to change the color dynamically
Inside the hoverColor action, add an update method that takes a new color parameter and updates the internal color variable so the hover color changes dynamically.
Svelte
Hint

The update method receives the new parameter and should assign it to the color variable.

3
Add a destroy method to clean up event listeners
Add a destroy method inside the hoverColor action that removes the mouseenter and mouseleave event listeners from the node.
Svelte
Hint

The destroy method should remove the event listeners added earlier to avoid memory leaks.

4
Use the hoverColor action in a Svelte component
In a Svelte component, create a <div> with the text Hover me! and apply the hoverColor action with the initial color 'lightblue'.
Svelte
Hint

Use the Svelte use: directive to apply the hoverColor action to the <div>.

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