- Vue – Testing with Vitest and Vue Test Utils
Tests you will keep running. Vitest and why a Vite project gets it almost for free, mounting a component with Vue Test Utils, asserting on rendered output rather than internals, testing props and emitted events, `flushPromises` for anything async, testing a Pinia store on its own, and where an end-to-end Playwright test earns its much higher cost.
- Vue – Performance
Making it fast, and knowing whether it was slow. Where re-renders actually come from, `v-once` and `v-memo`, `shallowRef` for a large object you replace rather than edit, why an IntersectionObserver beats a scroll listener, cursor pagination instead of offset, keeping heavy work out of computeds, and reading a flame chart in Vue DevTools before changing anything.
- Vue – Async Components, Suspense and KeepAlive
Not shipping everything on the first load. `defineAsyncComponent` with loading and error components, route-level code splitting and what Vite actually emits, `<Suspense>` and its still-experimental status, and `<KeepAlive>` for the tab or list that should not throw away its state and refetch every time you navigate back to it.
- Vue – Transitions and Teleport
Two small features that solve disproportionately annoying problems. `<Transition>` and the six CSS classes it toggles, `<TransitionGroup>` for a list that gains and loses items — the toast stack — and `<Teleport>`, which renders a modal at the end of `<body>` so it stops being clipped by whatever `overflow` and `z-index` its parent happened to set.
- Vue – Fetching Data from an API
Talking to a backend without scattering `fetch` through thirty components. One module that owns the transport, loading and error state that the UI can actually render, a typed error that separates "the API is down" from "your password is wrong", attaching a JWT and handling a 401 in exactly one place, and the mock implementation that lets the UI be built before the API exists.