solid-errors-reactivity-debugging
Installation
SKILL.md
solid-errors-reactivity-debugging
Quick Reference
Diagnostic Table: Symptom to Cause to Fix
| Symptom | Cause | Fix |
|---|---|---|
| UI never updates after signal change | Signal getter not called in JSX: {count} instead of {count()} |
ALWAYS call the getter: {count()} |
| Effect runs once, never again | Signal accessed outside tracking scope (component body, event handler) | Move signal access inside createEffect or JSX expression |
| Effect ignores some signals | Conditional access / early return before signal read | Read ALL signals before any conditional logic |
| Store property not updating in UI | Destructured store property: const { name } = store |
ALWAYS access via store.name in JSX |
| Store update has no effect | Direct mutation: store.name = "x" |
ALWAYS use setStore("name", "x") |
| Props stop updating | Destructured props: function Comp({ name }) |
ALWAYS use props.name, use splitProps if needed |
| Value is stale in timeout/callback | Signal value captured: const v = count() then used later |
Call count() at the point where you need the value |
| Effect works initially but stops | await inside effect breaks synchronous tracking |
Move async code to a separate function; read signals before await |
| Memo returns stale value | Memo dependency was untracked or destructured | Verify all signal getters are called inside memo callback |
| Store array update not reflected | Used store.items.push() instead of setter |
Use setStore("items", items.length, newItem) or produce |