SKILL.md
$2c
<script>
let count = $state(0); // Reactive state
let doubled = $derived(count * 2); // Computed value
</script>
Component Props
<script>
let { name, count = 0 } = $props();
let { value = $bindable() } = $props(); // Two-way binding
</script>
Snippets (replacing slots)
<script>
let { children, header } = $props();
</script>
{@render header?.()}
{@render children()}
Event Handlers
<!-- Svelte 5: use onclick, not on:click -->
<button onclick={() => count++}>Click</button>
Callback Props (replacing createEventDispatcher)
<script>
let { onclick } = $props();
</script>
<button onclick={() => onclick?.({ data })}>Click</button>
Common Mistakes
- **Using
letwithout$state** - Variables are not reactive without$state()
- **Using
$effectfor derived values** - Use$derivedinstead
- **Using
on:clicksyntax** - Useonclickin Svelte 5
- **Using
createEventDispatcher** - Use callback props instead
- **Using
<slot>** - Use snippets with{@render}
- **Forgetting
$bindable()** - Required forbind:to work
- Setting module-level state in SSR - Causes cross-request leaks
- Sequential awaits in load functions - Use
Promise.allfor parallel requests