Appearance
Dynamically repeating components
When you place elements inside a repeated list (like a Collection list), page-level variables and workflows are shared across all rows. That often causes every row to respond at once — for example, showing buttons in every row when you hover or focus just one.
The fix is simple: wrap your row UI into a reusable component. Component variables, workflows, and states are scoped to each instance, so each row behaves independently.
TIP
Prefer component-scoped variables and workflows over page-level ones inside repeated lists. It keeps behavior isolated and easier to maintain.
Why rows act in sync
What’s happening: In a repeated list, shared variables and workflows live outside each row, so one change is seen by every row,
What you see: Hover, focus, or click on one item makes all items react at the same time,
How to fix it: Move the logic into a component so every row gets its own isolated state and workflows.
Build the row component
Create a component that represents one row of your list. In this example, it has:
- an
Input wrapper
(holds the input) - a
Button wrapper
(holds the button and the tooltip)
Your list will render many instances of this component — one per item — each with its own state and behavior.
1) Show buttons only when the input is focused
- In the component, create a Boolean component variable called
isFocused
. - On the input element:
- On
Focus
: setisFocused
totrue
. - On
Blur
: after a short delay (e.g., 200 ms), setisFocused
tofalse
.
- On
- On the
Button wrapper
, set a render condition bound toisFocused
.
This makes the buttons appear only for the row you’re interacting with.
TIP
Add a tiny delay on Blur
so users can click the button before it hides (e.g., 200 ms).
2) Show a tooltip on hover using states
You can scope hover behavior without variables by using states:
- On the
Button wrapper
, enable theHover
state and apply it to children. - On the tooltip element:
- In the default state, hide the tooltip.
- In the parent’s
Hover
state, show the tooltip.
Each component instance manages its own hover state, so only the hovered row shows its tooltip.
TIP
States aren’t component-only features, but they’re great to localize behavior — each instance maintains its own state in a repeated list.
3) Use the component inside a repeated list
- Add a
Collection list
bound to your array (e.g., a simple list of items). - Drop your row component inside the repeated item.
- Bind any props as needed for that instance (e.g., item label).
Now each row behaves independently: focusing an input reveals only that row’s buttons, and hovering shows only that row’s tooltip.
Why this works
- Component variables live inside the component — each instance gets its own copy.
- Component workflows execute in the component’s scope — no cross-talk between rows.
- States apply per instance — hover/focus effects don’t “leak” to other rows.