Data report"State of code review 2024" is now liveRead the full report

React vs. Next.js vs. TypeScript

Greg Foster
Greg Foster
Graphite software engineer


Note

This guide explains this concept in vanilla Git. For Graphite documentation, see our CLI docs.


React, Next.js, and TypeScript are technologies that are often confused, but all do different things, let's dive in!:

  • React is a JavaScript library for building web user interfaces using modular and reusable components.
  • Next.js is a framework for building full-fledged web applications, using React for UI development.
  • TypeScript is a superset of JavaScript that introduces type safety and helps developers build more robust and maintainable web applications.

The complexity of your project will determine which of these technologies to use.

React is a popular JavaScript library designed to build reusable UI components for web applications. Each React component is written using JSX, a simple, HTML-like syntax, and it encapsulates the logic to render that component when given a particular set of parameters, as seen in the following example:

Terminal
// Simple component that accepts `name` parameter
function Welcome(props) {
return <h1>Hello, {props.name}</h1>
}
// Using the Welcome component in another component/page.
function Page() {
return <Welcome name="Paul" />
}

The React virtual DOM (VDOM) creates a copy of the actual DOM in memory. React uses this VDOM to render interactive components efficiently. Only updated components and their children are re-rendered in the browser, as demonstrated in the following diagram:

Diagram illustrating how React VDOM works

React is well-suited for the following:

  • Single-page applications: The library is ideal for building single-page applications with the look and feel of a native desktop app. Developers can create complex, dynamic user interfaces that load once and run entirely in the user's browser.
  • Interactive dashboards: React is a good choice if you have a page with many moving parts that must constantly refresh and show updated data.
  • Complex forms: If you're building web forms with multiple steps or advanced validation, React can simplify developing this.

Next.js is a full-blown web framework built on React. It provides developers with routing, server-side rendering (SSR), and other features for building production-ready, full-stack web applications and websites. Next.js's routing uses a file-based routing system to simplify application structure:

Diagram illustrating how the Next.js file router works

These routes also support SSR, which improves page load performance and search engine optimization (SEO).

Next.js lets developers host API endpoints alongside their pages using route handlers:

Terminal
// app/api/user/route.js
import { cookies } from 'next/headers'
import { getByCookieAsync } from '../../../lib/auth'
export async function GET() {
const cookieStore = cookies()
const authCookie = cookieStore.get('auth')
const user = await getByCookieAsync(authCookie)
return Response.json(user)
}

These endpoints let developers implement sensitive logic on the server, such as accessing databases and handling authentication.

Next.js is ideal for building the following:

  • Server-side rendered applications: Next.js's built-in SSR helps improve page load times and SEO.
  • Static site generation (SSG): Next.js's SSG features are helpful if you're building a website, blog, or documentation site that gets converted into static files at build time.
  • Large-scale applications: Next.js's file router and support for API routes let developers build large-scale, interactive web apps.

TypeScript is a strongly typed programming language developed on top of JavaScript. When compiled, the TypeScript code gets converted into vanilla JavaScript that can run in a user's browser or on the server using Node.js:

Diagram illustrating TypeScript's compilation process

The language helps developers build more robust web applications by adding types to variables, functions, and parameters:

Terminal
// A simple function with type annotations in TypeScript
function greet(name: string): string {
return `Hello, ${name}!`
}

The TypeScript compiler checks types at compile time and returns errors if the code contains type mismatches.

Since TypeScript is a superset of JavaScript, developers can use it in any application where they would typically use JavaScript:

  • React and Next.js applications: Instead of developing React and Next.js applications in JavaScript, developers can use TypeScript to enforce type safety and help build more robust web apps.
  • Large-scale projects: The codebase can become complex when building large-scale web applications. TypeScript helps developers manage this complexity by providing type safety and simplifying code navigation.
Stay unblocked. Ship faster.
Experience the new developer workflow - create, review, and merge code continuously. Get started with one command.
Learn more

Give your PR workflow
an upgrade today

Stack easier | Ship smaller | Review quicker

Or install our CLI.
Product Screenshot 1
Product Screenshot 2