一键导入
solid-core-rendering
SolidJS rendering: render for client apps, hydrate for SSR, renderToString for server rendering, renderToStream for streaming, isServer checks.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
SolidJS rendering: render for client apps, hydrate for SSR, renderToString for server rendering, renderToStream for streaming, isServer checks.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
SolidJS advanced components: SuspenseList for coordinating multiple Suspense boundaries, NoHydration for skipping hydration of static content.
SolidJS advanced utilities: createRoot for manual disposal, createUniqueId for SSR-safe IDs, useTransition for batching async updates, observable for RxJS interop, modifyMutable for batch updates.
SolidJS control flow: Show for conditionals, Switch/Match for multiple conditions, For/Index for lists, Dynamic for dynamic components, Suspense for async data.
SolidJS advanced JSX attributes: @once for static values, attr:*/bool:*/prop:* for Web Components, textContent for text nodes, innerHTML for raw HTML.
SolidJS lifecycle: onMount for DOM access after mount, onCleanup for resource disposal, effect lifecycle management, component vs effect cleanup.
Core SolidJS primitives: signals use getter functions count(), components run once (no re-renders), effects track automatically, stores use direct property access, memos for computed values. Fine-grained reactivity means targeted DOM updates.
| name | solid-core-rendering |
| description | SolidJS rendering: render for client apps, hydrate for SSR, renderToString for server rendering, renderToStream for streaming, isServer checks. |
| metadata | {"globs":["**/entry-*.tsx","**/*render*"]} |
Complete guide to rendering SolidJS applications. Understand client-side rendering, SSR, hydration, and streaming.
Mount your Solid app to the DOM. Essential browser entry point for SPAs.
import { render } from "solid-js/web";
const dispose = render(() => <App />, document.getElementById("app")!);
// Later, unmount
dispose();
Key points:
Correct usage:
// ✅ Correct - function
render(() => <App />, element);
// ❌ Wrong - JSX directly
render(<App />, element);
Hydrate server-rendered HTML with client-side code. Essential for SSR apps.
import { hydrate } from "solid-js/web";
const dispose = hydrate(() => <App />, document.getElementById("app")!);
Key points:
Options:
hydrate(() => <App />, element, {
renderId: "app", // Optional render ID
owner: undefined, // Optional owner context
});
Render components to HTML string for SSR.
import { renderToString } from "solid-js/web";
const html = renderToString(() => <App />);
// Returns: "<div>...</div>"
Use cases:
Render components with async data to HTML string.
import { renderToStringAsync } from "solid-js/web";
const html = await renderToStringAsync(() => <App />);
// Waits for async resources
Use cases:
Stream HTML to client for faster time-to-first-byte.
import { renderToStream } from "solid-js/web";
const stream = renderToStream(() => <App />);
// Pipe to response
stream.pipeTo(response);
Benefits:
Bootstrap hydration before Solid runtime loads.
import { HydrationScript, generateHydrationScript } from "solid-js/web";
// As component (JSX)
<HydrationScript nonce={nonce} eventNames={["click", "input"]} />
// As string (manual HTML)
const script = generateHydrationScript({
nonce,
eventNames: ["click", "input"],
});
Purpose:
<head> or before closing </body>Check if code is running on server.
import { isServer } from "solid-js/web";
if (isServer) {
// Server-only code
console.log("Running on server");
} else {
// Client-only code
console.log("Running on client");
}
Use cases:
// entry-client.tsx
import { render } from "solid-js/web";
import App from "./App";
render(() => <App />, document.getElementById("app")!);
// entry-server.tsx
import { renderToString, generateHydrationScript } from "solid-js/web";
import App from "./App";
export default function handler(req, res) {
const html = renderToString(() => <App />);
res.send(`
<!DOCTYPE html>
<html>
<head>
${generateHydrationScript()}
</head>
<body>
<div id="app">${html}</div>
</body>
</html>
`);
}
// entry-client.tsx
import { hydrate } from "solid-js/web";
import App from "./App";
hydrate(() => <App />, document.getElementById("app")!);
import { renderToStream } from "solid-js/web";
export default async function handler(req, res) {
const stream = renderToStream(() => <App />);
res.setHeader("Content-Type", "text/html");
stream.pipeTo(res);
}
import { isServer } from "solid-js/web";
function Component() {
if (isServer) {
// Server-only initialization
return <div>Server rendered</div>;
}
// Client-only code
const [mounted, setMounted] = createSignal(false);
onMount(() => setMounted(true));
return <div>Client: {mounted()}</div>;
}
Always use function form:
render(() => <App />, element)render(<App />, element)Empty mount element:
Hydration matching:
Use isServer checks:
Streaming for performance: