Performance: DOM event listeners (on:click)
This affects interaction responsiveness and memory usage by managing how click events are handled in the browser.
<script> let items = Array(1000).fill(0); function handleClick(event) { const index = event.target.dataset.index; if (index !== undefined) console.log(index); } </script> <div on:click={handleClick}> {#each items as item, i} <button data-index={i}>Click {i}</button> {/each} </div>
<script> let items = Array(1000).fill(0); </script> {#each items as item, i} <button on:click={() => console.log(i)}>Click {i}</button> {/each}
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Individual listeners per element | Many listeners attached (e.g., 1000) | 0 reflows triggered by listeners | Minimal paint cost | [X] Bad |
| Single delegated listener on parent | One listener attached | 0 reflows triggered by listener | Minimal paint cost | [OK] Good |
on:click directive do in a Svelte component?on:clickon:click directive listens for click events on an element.on:click runs code on click [OK]handleClick when a button is clicked in Svelte?on:eventName={handler} syntax for event listeners.on:click={handleClick} is the correct way to attach the click handler. <script>
let count = 0;
function increment() {
count += 1;
}
</script>
<button on:click={increment}>Clicked {count} times</button>count starts at 0. The increment function adds 1 to count each click.count becomes 0 + 3 = 3.<button on:click=increment()>Click me</button>
<script>
let count = 0;
function increment() {
count += 1;
}
</script>on:click=increment() calls the function immediately instead of on click. Correct is on:click={increment}.<script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button on:click={increment}>Increment</button>
<button on:click={reset}>Reset</button>
<p>Count: {count}</p> uses on:click={increment} and on:click={reset}, which is correct Svelte syntax.<script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button on:click={increment()}>Increment</button>
<button on:click={reset()}>Reset</button>
<p>Count: {count}</p> calls functions immediately, which is wrong. <script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button on:click=increment>Increment</button>
<button on:click=reset>Reset</button>
<p>Count: {count}</p> misses curly braces. <script>
let count = 0;
function increment() { count += 1; }
function reset() { count = 0; }
</script>
<button onClick={increment}>Increment</button>
<button onClick={reset}>Reset</button>
<p>Count: {count}</p> uses React style onClick, invalid in Svelte.Pass the test and this pattern moves unknown