Rendering different components based on the URL, without a full page reload.
A client-side router matches the current URL against a configured set of routes and renders the matching component tree, updating the URL through the browser's History API instead of triggering an actual page navigation. That interception is what makes single-page apps feel instant when moving between 'pages' — there's no full document reload, just React swapping out what's rendered.
Nested routes render nested layouts through an outlet component, letting a shared layout (navigation, sidebar) persist while only the inner content changes as the URL updates further. Dynamic segments in a route path (like /users/:id) let a matched component read the actual value from the URL, and lazily loading route components (combining code-splitting with Suspense) keeps the app's initial bundle from including every page's code before it's actually needed.
What you'll walk away knowing