Written from your scaling up note. The matching study page is Scaling up — SFC, tooling, routing, state, testing, SSR.
RouterLink and RouterView do, what a guard can return, why reading route.params once goes stale, a router with a lazy route, and NuxtLink's prefetch default.The note describes Vite as esbuild in development and Rollup in production, with Rolldown as the future. Since Vite 8 (March 2026) Rolldown handles both, and Nuxt 4.5 builds with it. Rolldown is the bundler inside Vite, not a "superpowered Vite".
"Also prefetches the chunks on hover" describes the opt-in prefetchOn: 'interaction'. By default NuxtLink prefetches when the link scrolls into view.
Navigation guards run before each navigation (beforeEach, beforeEnter, onBeforeRouteLeave), not before each component.
"No dynamic functionality" is not right: SSG pages hydrate and then behave like any client-side app. Only the pre-rendered HTML and data are fixed at build time.
For the $fetch-in-setup mismatch, the fix is useFetch or useAsyncData, which fetch once on the server and pass the result through the payload. useState is for shared state.
"A controlled memory leak" undersells it: on a server, module-level state is shared by every request, so one user's data can appear in another user's page.
Routes are defined in a script module such as router.ts, not router.vue. The example's const currentUserId = route.params.id goes stale when the same component is reused for another id.
/users/:id with plain Vue Router, log route.params.id read once and through a computed, then navigate from user 1 to user 2.nuxt analyze on a project and find the chunk for one lazy route."In development Vite does not bundle the app: it serves source files as native ES modules and transforms each one only when the browser requests it, with dependencies pre-bundled once, so start-up and hot updates stay fast as the app grows. For production it bundles everything into chunks, splitting at dynamic imports such as lazy routes. Until Vite 7 that meant esbuild for some dev work and Rollup for builds; Vite 8 runs Rolldown, a Rust bundler, for both, which removes dev and production differences and speeds up builds."
"Vue Router keeps the current route in a reactive reference. RouterLink renders a real <a> but intercepts clicks and updates the URL with the History API instead of loading a new page, and RouterView renders the component matched for that URL. Guards run before each navigation and can cancel or redirect. Lazy routes use dynamic imports so each page is its own chunk. One trap: the same component instance is reused when only params change, so values must be derived reactively from the route. Nuxt builds the routes from pages/ and its NuxtLink prefetches linked pages when they come into view."
Nothing yet. Notes filed here show up on this page and the section overview.
Built-in components
Questions and flashcards from your notes on Vue's built-in components — what triggers a Transition and its classes, the move class of TransitionGroup, how KeepAlive caches instances and DOM, its hooks, max and include, Teleport's logical versus DOM hierarchy and deferred targets, and what Suspense waits for, with errors and Nuxt pages — with a fact check of the notes.
Best practices
Questions and flashcards from your notes on the Vue docs' Best Practices chapter — shallow reactivity for large data, v-once, v-memo, lazy components and virtual scrolling, focus after route changes, heading levels, landmarks and their roles, aria-hidden, labels and descriptions, the aria-labelledby spelling, URL injection and safe rich text — with a fact check of the notes.