--- id: frontend-vue3-svelte5-patterns title: Vue 3 / Svelte 5 β€” modern composition / runes category: Coding status: draft source_trust_level: B verification_status: conceptual created_at: 2026-05-09 updated_at: 2026-05-09 tags: [frontend, vue, svelte, vibe-coding] tech_stack: { language: "TS", applicable_to: ["Frontend"] } applied_in: [] aliases: [Vue 3, Composition API, Pinia, Svelte 5, runes, $state, Nuxt, SvelteKit] --- # Vue 3 / Svelte 5 > React 의 alternative. **Vue 3 (composition API), Svelte 5 (runes β€” signal식)**. Modern reactivity. ## πŸ“– 핡심 κ°œλ… - Vue: composition API (React hooks λΉ„μŠ·). - Svelte 5: runes (signal-based). - λ‘˜ λ‹€ modern reactivity. - SSR μΉœν™” (Nuxt, SvelteKit). ## πŸ’» μ½”λ“œ νŒ¨ν„΄ ### Vue 3 SFC (Single File Component) ```vue ``` β†’ Template + script + style. ### Vue Composition API ```ts import { ref, reactive, computed, watch, onMounted } from 'vue'; const count = ref(0); // primitive const user = reactive({ name: '' }); // object const double = computed(() => count.value * 2); watch(count, (newVal, oldVal) => { console.log('count:', newVal); }); onMounted(() => { console.log('mounted'); }); ``` β†’ React hooks λΉ„μŠ·. ### Vue composable (custom hook) ```ts // composables/useCounter.ts export function useCounter(initial = 0) { const count = ref(initial); const inc = () => count.value++; return { count, inc }; } // μ‚¬μš© const { count, inc } = useCounter(); ``` ### Pinia (Vue 의 Zustand) ```ts import { defineStore } from 'pinia'; export const useUserStore = defineStore('user', { state: () => ({ name: '', age: 0 }), actions: { setName(name: string) { this.name = name; }, }, getters: { isAdult: (state) => state.age >= 18, }, }); // μ‚¬μš© const store = useUserStore(); store.setName('Alice'); console.log(store.isAdult); ``` ### Nuxt (Vue 의 Next) ```vue ``` β†’ File-based route + SSR/SSG/edge. ### Svelte 5 (runes) ```svelte ``` β†’ `$state` / `$derived` / `$effect` = runes. ### Svelte 5 의 λ³€ν™” ``` Svelte 4: implicit reactivity (let, $:). Svelte 5: explicit ($state, $derived). β†’ 더 λͺ…μ‹œμ . Compile-time. ``` ### SvelteKit (Svelte 의 Next) ```svelte

{data.name}

``` ```ts // routes/users/[id]/+page.server.ts export async function load({ params }) { const user = await fetchUser(params.id); return { name: user.name }; } ``` ### Vue vs React vs Svelte ``` Vue: - Template (HTML-friendly). - Composition API (modern). - 큰 ecosystem. - Pinia / Vue Router. Svelte: - Compile-time (no runtime VDOM). - μž‘μ€ bundle. - Beautiful syntax. - Smaller ecosystem. React: - κ°€μž₯ 큰 ecosystem. - Compiler (modern). - JSX (TS-friendly). ``` β†’ λ‹€ μ’‹μŒ. Team 의 μ„ ν˜Έ. ### Vue 의 reactivity caveat ```ts const obj = reactive({ count: 0 }); // ❌ Lost reactivity const { count } = obj; count++; // μ•ˆ trigger. // βœ… Use ref const count = ref(0); // λ˜λŠ” import { toRefs } from 'vue'; const { count } = toRefs(obj); ``` β†’ Destructure κ°€ lose reactivity. ### Svelte 5 의 reactive store ```svelte ``` β†’ Global signal 식. ### Vue v-model (two-way) ```vue ``` β†’ Two-way binding κ°€ native. ### Vue Teleport (portal) ```vue ``` β†’ React Portal λΉ„μŠ·. ### Suspense ```vue ``` ### Lifecycle (Vue) ```ts import { onMounted, onUnmounted, onUpdated } from 'vue'; onMounted(() => { ... }); onUnmounted(() => { ... }); onUpdated(() => { ... }); ``` ### Lifecycle (Svelte 5) ```svelte ``` ### Production ``` Vue: - Alibaba, Tencent (China). - Nuxt site / blog. - Enterprise admin. Svelte: - The New York Times. - Apple Music (μ˜›). - Brave browser. ``` ### Migration from React ``` Vue: - API κ°€ λΉ„μŠ· (composition). - Template 닀름. - Pinia β‰ˆ Zustand. - Nuxt β‰ˆ Next. Svelte: - 더 닀름. - μž‘μ€ bundle. - μƒˆ mental model. β†’ Vue κ°€ React β†’ migration κ°€ λΆ€λ“œλŸ¬μ›€. ``` ### Performance ``` Svelte: κ°€μž₯ 빠름 (compile-time). Vue 3: 빠름 (reactivity). React + Compiler: 빠름. β†’ λ§€ framework κ°€ modern. ``` ### LLM 도움 ``` Vue / Svelte 의 docs κ°€ LLM 에 baked. - Component μž‘μ„± OK. - μž‘μ€ ecosystem 의 niche library κ°€ μ•½. β†’ React 보닀 정확도 μ•½κ°„ ↓. ``` ## πŸ€” μ˜μ‚¬κ²°μ • κΈ°μ€€ | 상황 | μΆ”μ²œ | |---|---| | 큰 ecosystem | React | | μž‘μ€ bundle | Svelte | | HTML-friendly | Vue | | China market | Vue | | Beautiful code | Svelte | | Modern team | λ§€ λ‹€ OK | ## ❌ μ•ˆν‹°νŒ¨ν„΄ - **Vue reactive destructure**: lost. - **Svelte 4 β†’ 5 mix runes**: 깨짐. - **Library κ°€ React-only**: lock-in. - **Mixed framework**: complexity. ## πŸ€– LLM ν™œμš© 힌트 - Vue 3 composition API κ°€ modern. - Svelte 5 runes = signal-based. - Pinia / Nuxt / SvelteKit = ecosystem. - React + Compiler 와 수렴. ## πŸ”— κ΄€λ ¨ λ¬Έμ„œ - [[Frontend_SolidJS_Qwik]] - [[Frontend_React_Compiler_Deep]] - [[Frontend_State_Management_Modern]]