last update
May 23, 2026
license
MITv1.0.0
format
SKILL.md
- Install
// Downloads SKILL.md into ~/.claude/skills/solidjs-fine-grained/
$ curl -fsSL --create-dirs -o ~/.claude/skills/solidjs-fine-grained/SKILL.md https://claudeskil.com/skills/solidjs-fine-grained/SKILL.md - Invoke
// Inside Claude Code, type the skill name as a slash command
> /solidjs-fine-grained give my landing page a hero treatment - Or just ask
// Claude loads the skill by itself when a request matches its description
> give my landing page a hero treatment
- name:
- SolidJS Fine-Grained Reactivity
- slug:
- solidjs-fine-grained
- version:
- v1.0.0
- license:
- MIT
- author:
- @chiragthummar16
- categories:
- tags:
- #solidjs#signals#reactivity#solidstart#typescript
- description:
Build SolidJS apps that out-perform React: signals, stores, resources, suspense — done idiomatically.
README.md
SolidJS Fine-Grained Reactivity
This skill helps you write SolidJS the way it's meant to be written: leaning on its fine-grained reactivity instead of carrying over React habits. It's aimed at developers building Solid or SolidStart apps who want signals, stores, and resources used correctly — without re-rendering whole component trees on every state change.
When to use it
- Migrating a React mental model to Solid and tripping over the fact that components run once, not on every update.
- Deciding between
createSignal,createStore, andcreateMemofor a piece of state. - Wiring async data with
createResourceand wrapping it in<Suspense>/<ErrorBoundary>. - Setting up SSR, routing, or server functions in a SolidStart project.
- Debugging stale closures, lost reactivity from destructuring props, or effects that fire too often.
How it works
The skill generates idiomatic Solid and explains the reactive graph behind it. Core primitives it uses correctly:
createSignal— the[get, set]tuple; reads must happen inside a tracking scope (JSX,createMemo,createEffect).createStore— proxy-based nested state with thesetStore(path, value)and produce-style updates; ideal for objects/arrays where you want per-property tracking.createResource— async fetching tied to a source signal, exposing.loadingand.error.createMemo/createEffect— derived values vs. side effects, pluson()for explicit dependencies anduntrack()to opt out.- Control flow via
<For>,<Index>,<Show>,<Switch>, and concurrency via<Suspense>withuseTransition/startTransition. - SolidStart: file-based routing,
"use server"functions,cache()/createAsync, and SSR entrypoints.
Usage example
curl -fsSL --create-dirs -o ~/.claude/skills/solidjs-fine-grained/SKILL.md https://claudeskil.com/skills/solidjs-fine-grained/SKILL.md
import { createSignal, createResource } from "solid-js";
const fetchUser = (id: number) =>
fetch(`/api/users/${id}`).then((r) => r.json());
function Profile() {
const [id, setId] = createSignal(1);
const [user] = createResource(id, fetchUser); // refetches when id() changes
return (
<Suspense fallback={<p>Loading…</p>}>
<h1>{user()?.name}</h1>
<button onClick={() => setId(id() + 1)}>Next</button>
</Suspense>
);
}
Tips & gotchas
- Never destructure props.
const { name } = propssnapshots the value and kills reactivity. Readprops.nameat point of use, or usesplitProps. - Call signals as functions:
count(), notcount. A bare reference doesn't track. - Prefer
<For>for keyed lists and<Index>when the index is stable but items mutate — they have opposite re-render semantics. createEffectruns after render and re-tracks every read; useon(source, fn)when you want a single explicit dependency.
FAQ
Do I need a virtual DOM? No. Solid compiles JSX to real DOM updates; only the exact nodes bound to a changed signal update.
Signal vs. store? Use a signal for a single value; use a store for nested objects/arrays so updates track individual properties without replacing the whole object.
Is SolidStart required? No — Solid runs standalone via Vite. SolidStart adds SSR, routing, and server functions when you need them.
$ cat reviews/