React 7,897 , as React.js describes it, is a rendering library: it turns state into a component tree and reconciles that tree against the DOM. It has no opinion about URLs, no way to talk to a database, no build step and no server. The Vite 25,978 setup of Creating a Project with Vite supplies one of those: a bundler.
Next.js 10,514 supplies the rest by moving the first render to the server. A request for /books reaches a Node process, page.tsx runs there as an async function, awaits the data it needs, and the server streams finished HTML. Only components marked 'use client' ship as code to hydrate.

That change pulls a list of concerns inside the framework: routing becomes folders under app/ instead of react-router (Routing with the App Router), data fetching becomes await in a component instead of useEffect (Fetching Data), caching gets a first-class API in "use cache" and tags (Caching and Revalidation), mutations become Server Actions (Server Actions and Mutations), endpoints that must stay endpoints become route.ts handlers rather than a separate Express 24,430 app (Route Handlers and the Proxy), and images and fonts get next/image and next/font (Styling, Fonts, and Images). None of it replaces React: your components, props, state, effects and hooks are the ones from React.js and behave identically once they run in the browser.