Discover how passing parameters to actions can save you from endless repetitive code!
Why Action parameters in Svelte? - Purpose & Use Cases
Imagine you want to add a tooltip to many buttons on your webpage, each showing different text when hovered.
You try to write separate event listeners for each button manually.
Manually adding event listeners for each element is repetitive and error-prone.
If you want to change the tooltip behavior, you must update every listener separately.
This wastes time and makes your code messy.
Svelte's action parameters let you pass custom data to reusable actions.
This means you write one action for the tooltip and customize it easily for each element.
It keeps your code clean and flexible.
button.addEventListener('mouseenter', () => showTooltip('Save'));
<button use:tooltip={"Save"}>Save</button>It enables writing one flexible action that adapts to different elements by receiving parameters.
Adding a reusable drag-and-drop action where each draggable item can have different drag data passed as a parameter.
Manual event handling for each element is slow and repetitive.
Action parameters let you customize reusable actions easily.
This leads to cleaner, more maintainable code in Svelte apps.
Practice
use:action={parameter}?Solution
Step 1: Understand action parameters
Action parameters allow you to send extra data to a Svelte action to customize its behavior.Step 2: Identify the purpose of
This syntax passes the parameter to the action so it can use it internally.use:action={parameter}Final Answer:
To customize the behavior of the action with extra data -> Option BQuick Check:
Action parameters customize behavior = A [OK]
- Thinking parameters define components
- Confusing parameters with styling
- Assuming parameters import libraries
color with value 'red' to a Svelte action called highlight?Solution
Step 1: Recall correct parameter passing syntax
Svelte actions receive parameters usinguse:action={parameter}where parameter can be any value or object.Step 2: Identify correct object syntax for passing color
To pass an object with a keycolorand value'red', use{color: 'red'}inside curly braces.Final Answer:
use:highlight={{color: 'red'}} -> Option AQuick Check:
Pass object with color key = D [OK]
- Using parentheses instead of curly braces
- Passing string directly without braces
- Passing variable without defining it
function border(node, { color }) {
node.style.border = `2px solid ${color}`;
return {
update({ color }) {
node.style.border = `2px solid ${color}`;
}
};
}What will be the border color after this code runs?
<div use:border={{ color: 'blue' }}>Box</div>Solution
Step 1: Understand initial border style setting
The action sets the border style to '2px solid' plus the passed color, which is 'blue'.Step 2: Confirm the border color after applying the action
The div will have a blue border because the parameter color is 'blue' and the style is applied immediately.Final Answer:
A 2px solid blue border -> Option AQuick Check:
Passed color 'blue' sets border color = B [OK]
- Assuming default color instead of passed color
- Ignoring the update method
- Thinking no border is set initially
function scale(node, factor) {
node.style.transform = `scale(${factor})`;
return {
update(newFactor) {
node.style.transform = `scale(${newFactor})`;
}
};
}Which of the following will result in an invalid CSS transform value when used as
use:scale={...}?Solution
Step 1: Analyze expected parameter type
The action expects a single number parameterfactor, not an object.Step 2: Identify which option passes an object instead of a number
use:scale={{ factor: 2 }} passes an object{ factor: 2 }, which will causescale(${newFactor})to becomescale([object Object]), an invalid CSS transform value.Final Answer:
use:scale={{ factor: 2 }} -> Option CQuick Check:
Passing object instead of number causes invalid transform = C [OK]
- Passing object when number expected
- Passing string instead of number (allowed but may cause visual issues)
- Passing objects when primitive expected
tooltip that shows a message passed as a parameter and updates the message if it changes. Which of these implementations correctly handles parameter updates?Solution
Step 1: Check for update method handling parameter changes
function tooltip(node, message) { const tip = document.createElement('span'); tip.textContent = message; node.appendChild(tip); return { update(newMessage) { tip.textContent = newMessage; }, destroy() { node.removeChild(tip); } }; }defines anupdatemethod that updates the tooltip text when the parameter changes.Step 2: Verify cleanup with destroy method
This implementation also defines adestroymethod to remove the tooltip element when the action is removed, which is good practice.Final Answer:
The implementation withupdateanddestroymethods -> Option DQuick Check:
Update method handles parameter changes = A [OK]
- Not implementing update method for parameter changes
- Not cleaning up DOM elements on destroy
- Using incorrect element types or missing return object
Ready to prove it?
Pass the test and this pattern moves unknown
