Web / TanStack Interview Questions
How does TanStack Router handle route-level errors and loading states?
Each route accepts errorComponent and pendingComponent. When a loader throws, errorComponent renders instead of the page — no flash of protected content, no try/catch in every component.
import { createRoute } from "@tanstack/vue-router" import { defineComponent, h } from "vue" const RouteError=defineComponent({ props: { error:{ type:Error, required:true } }, setup(props){ return ()=>h("div",null,[ h("h2","Something went wrong"), h("p",props.error.message), ]) }, }) const RoutePending=defineComponent({ setup:()=>()=>h("div","Loading..."), }) export const userDetailRoute=createRoute({ getParentRoute: ()=>rootRoute, path: "/users/$userId", component: UserDetailPage, pendingComponent: RoutePending, pendingMs: 200, // only show pending if loader > 200 ms â avoids flash errorComponent: RouteError, loader: async ({ params })=>{ const user=await fetchUser(Number(params.userId)) if(!user) throw new Error("User not found") return { user } }, })
More Related questions...