--- id: frontend-solid-qwik-deep title: SolidJS / Qwik β signal-based reactivity category: Coding status: draft source_trust_level: B verification_status: conceptual created_at: 2026-05-09 updated_at: 2026-05-09 tags: [frontend, solid, qwik, vibe-coding] tech_stack: { language: "TS", applicable_to: ["Frontend"] } applied_in: [] aliases: [SolidJS, Qwik, signals, fine-grained reactivity, resumability, no VDOM] --- # SolidJS / Qwik > React μ future. **Solid (signal, no VDOM), Qwik (resumability, 0 hydration)**. Modern reactivity primitive. ## π ν΅μ¬ κ°λ - Signal: reactive primitive. - Solid: compile-time + signals. - Qwik: lazy hydrate (resumability). - React Compiler κ° λΉμ· path. ## π» μ½λ ν¨ν΄ ### Solid ```tsx import { createSignal, createEffect } from 'solid-js'; function Counter() { const [count, setCount] = createSignal(0); createEffect(() => { console.log('count:', count()); }); return ; } ``` β `count()` κ° function. Component κ° 1λ² λ§ (no re-render). ### Solid μ signal ```ts const [name, setName] = createSignal('Alice'); console.log(name()); // 'Alice' setName('Bob'); console.log(name()); // 'Bob' ``` β Get / set primitive. ### Effect / memo ```tsx const double = createMemo(() => count() * 2); // β cached, signal λ³κ²½ μλ§ μ¬κ³μ°. createEffect(() => { console.log('double:', double()); }); ``` β React μ useMemo / useEffect λΉμ·. ### Resource (async) ```tsx const [user] = createResource(userId, fetchUser); return
{user()?.name}
; ``` β Suspense μΉν. ### Solid μ "no VDOM" ``` React: λ§€ render = VDOM diff. Solid: λ§€ signal λ³κ²½ = μ ν DOM λΆλΆ update. β "Most efficient" benchmark. ``` ### Solid Start (fullstack) ```tsx // routes/index.tsx export default function Home() { const [count, setCount] = createSignal(0); return ; } ``` β Next.js μ Solid version. ### Qwik ```tsx import { component$, useSignal } from '@builder.io/qwik'; export default component$(() => { const count = useSignal(0); return ( ); }); ``` β `$` = lazy boundary. JS κ° lazy load. ### Qwik μ resumability ``` React: - Server render HTML. - Client hydrate (λͺ¨λ JS). - "Hydration cost" = ν°. Qwik: - Server render HTML + state. - Client = 0 JS download (idle). - Click μ = κ·Έ click handler μ JS λ§ download. β ν° page = λ§€μ° λΉ λ¦ first interaction. ``` ### Qwik City (fullstack) ```tsx // routes/index.tsx import { component$ } from '@builder.io/qwik'; export default component$(() => { return{state.count()}
; ``` ### Future ``` 2026: Solid κ° niche, React Compiler κ° mainstream. Qwik κ° specific (e-commerce). React + Compiler κ° κ°μ₯ ν° user base. β "Best framework" debate κ° μ§λ. "Use what works" κ° λ΅. ``` ## π€ μμ¬κ²°μ κΈ°μ€ | μν© | μΆμ² | |---|---| | Performance critical | Solid | | 0 hydration cost | Qwik | | ν° ecosystem | React + Compiler | | Migration | React stay | | New small project | Solid μλ | | E-commerce | Qwik / Astro | ## β μν°ν¨ν΄ - **Signal destructure**: lose reactivity. - **Solid + React patterns κ°μ **: λ€λ¦. - **λͺ¨λ κ±° reactive**: κ°μ§ dependency. - **Qwik + heavy interaction**: hydration cost. - **Bundle size κ°μ‘° + library ν°**: trade-off. ## π€ LLM νμ© ννΈ - Signal κ° modern reactivity. - React Compiler κ° React μ λ΅. - Solid κ° niche / specific. - Qwik κ° e-commerce μΉν. ## π κ΄λ ¨ λ¬Έμ - [[Frontend_SolidJS_Qwik]] - [[Frontend_React_Compiler_Deep]] - [[Frontend_Million_Optimization]]