import{_ as i,o as t,c as a,ae as e}from"./chunks/framework.C8AWLET_.js";const g=JSON.parse('{"title":"♻️ Reactive Lists: $.for( )","description":"","frontmatter":{},"headers":[],"relativePath":"api/for.md","filePath":"api/for.md"}'),n={name:"api/for.md"};function l(h,s,r,p,k,d){return t(),a("div",null,[...s[0]||(s[0]=[e(`
$.for( ) The $.for function is a high-performance list renderer. It maps an array (or a Signal containing an array) to DOM nodes. Unlike a simple .map(), $.for is keyed, meaning it only updates, moves, or deletes the specific items that changed.
$.for(
source: Signal<any[]> | Function | any[],
render: (item: any, index: number) => HTMLElement,
keyFn: (item: any, index: number) => string | number
): HTMLElement| Parameter | Type | Required | Description |
|---|---|---|---|
source | Signal | Yes | The reactive array to iterate over. |
render | Function | Yes | A function that returns a component or Node for each item. |
keyFn | Function | Yes | A function to extract a unique ID for each item (crucial for performance). |
Returns: A div element with display: contents containing the live list.
Always use a unique property (like an id) as a key to ensure SigPro doesn't recreate nodes unnecessarily.
const users = $([
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" }
]);
Ul({ class: "list" }, [
$.for(users,
(user) => Li({ class: "p-2" }, user.name),
(user) => user.id
)
]);If your array contains simple strings or numbers, you can use the value itself or the index as a key (though the index is less efficient for reordering).
const tags = $(["Tech", "JS", "Web"]);
Div({ class: "flex gap-1" }, [
$.for(tags, (tag) => Badge(tag), (tag) => tag)
]);When the source signal changes, $.for performs the following steps:
Map..destroy() on that specific item's instance. This stops all its internal watchers and removes its DOM nodes.Math.random() as a key. This will force SigPro to destroy and recreate the entire list on every update, killing performance.$.for ensures that state is preserved even if the list is reordered, as long as the key remains the same.| Feature | Standard Array.map | SigPro $.for |
|---|---|---|
| Re-render | Re-renders everything | Only updates changes |
| DOM Nodes | Re-created every time | Reused via Keys |
| Memory | Potential leaks | Automatic Cleanup |
| State | Lost on re-render | Preserved per item |