一键导入
solidjs
Expert guide for SolidJS development, covering reactivity, component patterns, and migration from React.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Expert guide for SolidJS development, covering reactivity, component patterns, and migration from React.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Best practices for writing clean, maintainable, and robust tests with TUnit.
Use `helium-browser --dump-dom` to inspect the fully rendered DOM after JavaScript execution. For debugging layout/scrolling issues and scraping dynamic pages.
Senior UI/UX Engineer. Architect digital interfaces overriding default LLM biases. Enforces metric-based rules, strict component architecture, CSS hardware acceleration, and balanced design engineering.
CLI tool for AI agents to browse the web, interact with UI elements, and analyze frontend applications. Supports navigation, clicking, typing, and capturing snapshots for accessibility analysis.
Expert guide for creating, configuring, and managing Opencode Agents. Use this skill when the user wants to create a new agent or modify an existing one.
Expert guide and best practices for building production-ready web APIs with Axum 0.8+ in Rust. Use this skill when developing, refactoring, or structuring Axum applications.
| name | solidjs |
| description | Expert guide for SolidJS development, covering reactivity, component patterns, and migration from React. |
This skill provides best practices, patterns, and anti-patterns for developing with SolidJS. It focuses on the "Render Once" mental model, fine-grained reactivity, and avoiding common pitfalls when transitioning from React.
Consult this skill when:
SolidJS components execute exactly once to set up reactive dependencies. This is the most critical difference from React.
// ❌ WRONG: React mental model - expecting re-execution
function Counter() {
const [count, setCount] = createSignal(0);
console.log("This runs ONCE, not on every update"); // Only logs once
return <button onClick={() => setCount(count() + 1)}>{count()}</button>;
}
// ✅ CORRECT: Use effects for reactive logic
function Counter() {
const [count, setCount] = createSignal(0);
createEffect(() => {
console.log("Count changed:", count()); // Logs on every change
});
return <button onClick={() => setCount(count() + 1)}>{count()}</button>;
}
React re-renders component trees; SolidJS updates individual DOM nodes. Updates are O(1) per signal, not O(n) per component tree.
createSignal returns a tuple: [getter, setter]. Never destructure the getter.
createMemoFor expensive computations depending on signals. Automatically memoized.
// ✅ CORRECT: Only recalculates when dependencies change
const expensiveResult = createMemo(() => heavyCalculation(props.data()));
createEffectFor DOM manipulation, logging, or external state sync. Cleanup is mandatory for subscriptions.
createEffect(() => {
const handler = () => console.log("clicked");
document.addEventListener("click", handler);
onCleanup(() => document.removeEventListener("click", handler));
});
createResourceHandles loading, error states, and integrates with <Suspense>.
Props are reactive proxies. Destructuring breaks the proxy.
// ❌ WRONG: Destructuring loses reactivity
function MyComponent({ name }) { ... }
// ✅ CORRECT: Access props directly
function MyComponent(props) {
return <div>{props.name}</div>;
}
// ✅ CORRECT: Use splitProps for partial access
const [local, others] = splitProps(props, ["name"]);
Never use .map or ternaries directly in JSX for dynamic lists/conditions. Use <For>, <Show>, <Switch>, and <Match>.
// ✅ CORRECT
<For each={items()}>
{(item) => <div>{item.name}</div>}
</For>
createStore for collections, not arrays of signals.batch(() => { ... }) to group multiple updates.lazy(() => import(...)) for routes.isServer checks or <ClientOnly> for browser APIs/random values.mutate helper.useState with createSignaluseMemo with createMemouseEffect with createEffect + onCleanupuseContext with useContext (similar API)useCallback and React.memo (not needed).map() with <For><Show>props.name (no destructuring)