---
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
{{ data.name }}
```
β 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]]