Bird
Raised Fist0
Svelteframework~10 mins

Action update and destroy in Svelte - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Action update and destroy
Component mounts
↓
Action called
↓
Action returns object with update and destroy
↓
update called on prop change
↓
destroy called on component unmount
↓
Cleanup done
When a Svelte component mounts, the action runs and returns update and destroy functions. Update runs on prop changes, destroy runs on unmount.
Execution Sample
Svelte
function highlight(node, color) {
  node.style.backgroundColor = color;
  return {
    update(newColor) { node.style.backgroundColor = newColor; },
    destroy() { node.style.backgroundColor = ''; }
  };
}
This action sets background color, updates it when color changes, and clears it on destroy.
Execution Table
StepTriggerAction Function CalledParameterEffect on DOM
1Component mountshighlight"yellow"Sets backgroundColor to yellow
2Prop changes color to "lightblue"update"lightblue"Changes backgroundColor to lightblue
3Prop changes color to "pink"update"pink"Changes backgroundColor to pink
4Component unmountsdestroynoneClears backgroundColor style
💡 Component unmount triggers destroy, cleaning up styles.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4
node.style.backgroundColor''"yellow""lightblue""pink"''
Key Moments - 3 Insights
Why does the update function run multiple times?
Because the color prop changes multiple times (see execution_table steps 2 and 3), update runs each time to reflect the new color.
What happens if destroy is not defined?
Without destroy (step 4), the style would not be cleaned up on unmount, possibly leaving unwanted styles on the element.
Does the action run again when props change?
No, the action runs once on mount (step 1). On prop changes, only update runs (steps 2 and 3).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the backgroundColor after step 2?
A"pink"
B"yellow"
C"lightblue"
D''
💡 Hint
Check the 'Effect on DOM' column at step 2 in execution_table.
At which step does the destroy function run?
AStep 1
BStep 4
CStep 2
DStep 3
💡 Hint
Look for 'Component unmounts' in the 'Trigger' column in execution_table.
If the color prop never changes, how many times does update run?
A0 times
B1 time
CMultiple times
DUpdate does not exist
💡 Hint
See execution_table steps 2 and 3 where update runs on prop changes.
Concept Snapshot
Svelte actions run once on mount and can return update and destroy functions.
update runs when props change to update the element.
destroy runs on unmount to clean up.
Use update to react to prop changes without rerunning the whole action.
Use destroy to remove side effects or event listeners.
Full Transcript
In Svelte, an action is a function that runs when an element is created. It can return an object with update and destroy functions. The update function runs whenever the action's parameters change, allowing you to update the element accordingly. The destroy function runs when the element is removed from the DOM, letting you clean up any changes or listeners. For example, a highlight action sets the background color on mount, updates it when the color changes, and clears it on destroy. This flow helps keep your UI responsive and clean.

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