React: a complete overview, pros, cons and limits
What React is for and where it pays off: 8 areas, pros and cons, a comparison with Vue, Angular and Svelte, the ecosystem, React 19, code examples, limits and tips.
In short
React is a free JavaScript library for building interfaces out of components: a screen is described as a function of data, and React updates the page when the data changes. Created at Meta in 2013, it is the most widespread tool for application-like interfaces — personal accounts, dashboards, SaaS, Telegram Mini Apps — and, through React Native, mobile apps. Its strengths are the component model, a huge ecosystem and talent pool, and mature frameworks like Next.js. Its costs are weight (about 66 KB of compressed JavaScript before your code), the need to choose routing, data and state tools yourself, and SEO that requires server rendering.
React at a glance
The main facts in one table — where React came from, how it works and how it evolves.
- Type
- A JavaScript library for building user interfaces
- History
- Facebook (now Meta), 2013; author — Jordan Walke
- Governance
- In 2025 a move to the React Foundation under the Linux Foundation was announced
- License
- MIT — free, including commercial use
- Idea
- The interface is a function of data; components, one-way data flow
- Syntax
- JSX — markup inside JavaScript or TypeScript
- Current version
- React 19: Actions, Server Components, the React Compiler
- Weight
- About 66 KB of gzip for a minimal app built by Vite — before your own code
- Frameworks
- Next.js, React Router, Expo for mobile
- Mobile
- React Native — native apps for iOS and Android
- Popularity
- Among the most used web frameworks in the Stack Overflow survey for years
What React is used for: 8 areas
React is at its best where the screen lives after loading. Under each area — the tools it usually comes with.
-
01
Personal accounts
Orders, settings, documents and notifications on screens that update without reloading.
-
02
Dashboards and admin panels
Tables, filters, charts and editing in one place.
-
03
SaaS products
When the interface is the product, its states and speed of development matter most.
-
04
Telegram Mini Apps
An application inside the messenger: catalogue, booking, payment.
-
05
Editors and builders
Drag and drop, undo, live preview — many states that change at once.
-
06
Mobile apps
React Native draws native components on iOS and Android from one code base.
-
07
Interactive blocks on sites
A calculator, a configurator or a cart as an island on an ordinary server page.
-
08
Large products with public pages
Server rendering gives ready pages for search, and React keeps the interactive part.
Pros and cons of React
React gives a strong model for complex interfaces and leaves many decisions to you. Both sides come from the same choice.
Pros · 8
-
Components
A screen is assembled from small reusable parts with clear inputs.
-
Predictable updates
Change the data — React redraws what is needed; no manual DOM juggling.
-
A huge ecosystem
Ready libraries for tables, forms, charts, drag and drop and design systems.
-
Many developers
The largest talent pool among interface tools — the project does not depend on one person.
-
TypeScript out of the box
Typed props and hooks catch errors before launch.
-
Mobile from the same knowledge
React Native uses the same model for iOS and Android.
-
Mature frameworks
Next.js and React Router give server rendering, routing and data loading.
-
The compiler does the optimisation
The React Compiler adds memoisation automatically instead of manual
useMemo.
Cons · 8
-
Weight
About 66 KB of compressed JavaScript before your code — noticeable on weak phones.
-
A library, not a framework
Routing, data loading, forms and state — you choose and connect them yourself.
-
SEO needs a server
Content built only in the browser is seen worse by search engines and AI crawlers.
-
Changing paradigms
Classes, then hooks, then server components — old code and old articles age fast.
-
useEffect pitfalls
Effects that sync state cause double requests and loops — the most common React bug.
-
Hydration cost
A server-rendered page still has to “come alive” in the browser by running the same code.
-
Many dependencies
A typical project pulls hundreds of packages that need regular updates.
-
Overkill for content sites
A site that is read gets weight and complexity without a benefit.
React compared with Vue, Angular and Svelte
A qualitative comparison of the four most common tools for interfaces.
| Criterion | React | Vue | Angular | Svelte |
|---|---|---|---|---|
| What it is | a library | a progressive framework | a full framework | a compiler |
| Author | Meta | Evan You and the community | Rich Harris and the community | |
| Weight in the browser | medium | smaller | the largest | the smallest |
| Entry bar | medium | low | high | low |
| Built-in decisions | few, the ecosystem decides | routing and state from the team | everything | routing in SvelteKit |
| Server rendering | Next.js | Nuxt | Angular SSR | SvelteKit |
| Mobile | React Native | through third-party tools | Ionic | through third-party tools |
| Developers on the market | the most | many | many in enterprise | fewer |
| Best for | products, SaaS, mobile together | fast start, mid-size apps | large corporate systems | light and fast interfaces |
When to choose React — and when not to
Twelve typical projects with a verdict. Where React is not the best choice, the alternative is named.
-
Personal account
Best fitMany states and live data — React’s home ground.
-
Dashboard or admin panel
Best fitReady libraries for tables, filters and charts.
-
SaaS product
Best fitThe interface is the product, and the team is easy to find.
-
Telegram Mini App
Best fitAn application inside the messenger with screens and payment.
-
Editor or builder
Best fitComplex states that change at once.
-
Web and mobile with one team
Best fitReact and React Native share the model and part of the code.
-
Online shop
WorksServer pages for search, React in the cart and checkout — or Next.js.
-
A calculator on a site
WorksAs an island; a small one can be done without React.
-
Landing page
Pick anotherServer HTML: speed on mobile decides the conversion.
-
Corporate site
Pick anotherContent and a form do not need a framework.
-
Blog or media
Pick anotherPages are read: server HTML is faster and clearer for search.
-
A widget of a few lines
Pick anotherPlain JavaScript or the browser’s own elements.
The React ecosystem: tools for common tasks
React itself only draws the interface; everything else comes from the ecosystem.
| Task | Tools |
|---|---|
| Building | Vite |
| Frameworks | Next.js, React Router, TanStack Start |
| Server data | TanStack Query, SWR |
| Client state | Zustand, Jotai, Redux Toolkit |
| Forms | React Hook Form, Zod |
| Components and UI kits | shadcn/ui, Radix, MUI, Mantine |
| Tables | TanStack Table, AG Grid |
| Animation | Motion |
| Styling | CSS Modules, Tailwind |
| Tests | Vitest, Testing Library, Playwright |
| Mobile | React Native, Expo |
The limits of React and common mistakes
-
Effects instead of calculations
What can be calculated from props during render does not need
useEffectand extra state. -
One giant component
A thousand lines in one file re-render together and cannot be read.
-
Global state for everything
Data from the server belongs in a query cache, not in a global store.
-
Content only in the browser
Public pages need server rendering, otherwise search and AI see an empty page.
-
Huge lists without virtualisation
Ten thousand rows on screen freeze any framework; draw only what is visible.
-
A package for every trifle
Each dependency is weight and an update to keep track of.
8 tips for React that stays fast and clear
-
01
TypeScript from the start
Typed props are the cheapest documentation and the first line of defence.
-
02
Small components
One component — one job; it is easier to read, test and reuse.
-
03
Calculate, do not synchronise
Derived values are computed during render; effects are for talking to the outside world.
-
04
A query cache for server data
TanStack Query handles loading, errors, refreshes and caching for you.
-
05
The React Compiler
It adds memoisation itself — remove manual
useMemoanduseCallbackwhere it is on. -
06
Server rendering for public pages
Next.js or islands on a server page — so search engines see the content.
-
07
Measure the bundle
Check what each new library adds; load heavy screens only when needed.
-
08
Accessibility in components
Real buttons, labels and focus — a beautiful
divwith a click is not a button.
What React looks like: 3 examples
A component with state, a form on React 19 Actions and a custom hook. Checked by TypeScript 7 in strict mode, rendered on the server and clicked through in Chromium.
A component with state
Typed props in, markup out; a click changes the state, and React redraws the price.
import { useState } from 'react';
type Product = { id: number; name: string; price: number; inStock: boolean };
// a component is a function: props in, markup out
export function ProductCard({ product }: { product: Product }) {
const [qty, setQty] = useState(1);
return (
<article className="card">
<h3>{product.name}</h3>
<p>Price: {product.price * qty}</p>
{product.inStock ? (
<button onClick={() => setQty(qty + 1)}>Add one more ({qty})</button>
) : (
<p>Out of stock</p>
)}
</article>
);
}
A form on React 19 Actions
The form sends itself, the button knows the request is in progress, and the answer comes back as state.
import { useActionState } from 'react';
type State = { ok: boolean; message: string };
// React 19 Actions: the form sends itself, and the state of the request comes back
async function subscribe(_prev: State, form: FormData): Promise<State> {
const email = String(form.get('email') ?? '');
if (!email.includes('@')) return { ok: false, message: 'Check the email' };
// here — a request to your server
return { ok: true, message: 'Done, thank you!' };
}
export function SubscribeForm() {
const [state, action, pending] = useActionState(subscribe, { ok: false, message: '' });
return (
<form action={action}>
<input name="email" type="email" placeholder="[email protected]" required />
<button disabled={pending}>{pending ? 'Sending…' : 'Subscribe'}</button>
{state.message && <p role="status">{state.message}</p>}
</form>
);
}
A custom hook
Reusable logic with its own state: the chosen theme survives a page reload.
import { useEffect, useState } from 'react';
// a custom hook: reusable logic with its own state, typed by the value
export function useLocalStorage<T>(key: string, initial: T) {
const [value, setValue] = useState<T>(() => {
const saved = typeof window === 'undefined' ? null : localStorage.getItem(key);
return saved === null ? initial : (JSON.parse(saved) as T);
});
useEffect(() => {
localStorage.setItem(key, JSON.stringify(value));
}, [key, value]);
return [value, setValue] as const;
}
// any component can use it: the theme survives a page reload
export function ThemeSwitch() {
const [theme, setTheme] = useLocalStorage<'light' | 'dark'>('theme', 'light');
return (
<button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
Theme: {theme}
</button>
);
}
Questions about React
Is React a framework or a library?
A library: it draws the interface. Routing, data loading and server rendering come from frameworks like Next.js or React Router.
Does a website need React?
A site that is read — usually not; an interface people work in — usually yes.
React or Vue?
Both are good. React has a larger ecosystem, more developers and React Native; Vue is easier to start with and has more built in.
Is React bad for SEO?
Only when content is built in the browser. With server rendering pages come ready, and search engines see them.
What is new in React 19?
Actions for forms and requests, server components in frameworks and the React Compiler that optimises re-renders automatically.
What is Next.js?
The most popular React framework: server rendering, routing and an API in one project.
Can one team build web and mobile?
Yes, with React and React Native — the model and part of the code are shared.
How much does React weigh?
A minimal app built by Vite is about 66 KB in gzip before your own code.
Online form
Development
in React
I build interfaces in React with TypeScript where the screen works like an application: personal accounts, dashboards, admin panels and Telegram Mini Apps. Tell me about the task — I answer within one working day.