Why use React?

This isn’t a rhetorical question. I genuinely want to know why developers choose to build websites using React.

There are many possible reasons. Alas, none of them relate directly to user experience, other than a trickle-down justification: happy productive developers will make better websites. Citation needed.

It’s also worth mentioning that some people don’t choose to use React, but its use is mandated by their workplace (like some other more recent technologies I could mention). By my definition, this makes React enterprise software in this situation. My definition of enterprise software is any software that you use but that you yourself didn’t choose.

Inertia

By far the most common reason for choosing React today is inertia. If it’s what you’re comfortable with, you’d need a really compelling reason not to use it. That’s generally the reason behind usage mandates too. If we “standardise” on React, then it’ll make hiring more straightforward (though the reality isn’t quite so simple, as the React ecosystem has mutated and bifurcated over time).

And you know what? Inertia is a perfectly valid reason to choose a technology. If time is of the essence, and you know it’s going to take you time to learn a new technology, it makes sense to stick with what you know, even if it’s out of date. This isn’t just true of React, it’s true of any tech stack.

This would all be absolutely fine if React weren’t a framework that gets executed in browsers. Any client-side framework is a tax on the end user. They have to download, parse, and execute the framework in order for you to benefit.

But maybe React doesn’t need to run in the browser at all. That’s the promise of server-side rendering.

The front end

There used to be a fairly clear distinction between front-end development and back-end development. The front end consisted of HTML, CSS, and client-side JavaScript. The back end was anything you wanted as long as it could spit out those bits of the front end: PHP, Ruby, Python, or even just a plain web server with static files.

Then it became possible to write JavaScript on the back end. Great! Now you didn’t need to context-switch when you were scripting for the client or the server. But this blessing also turned out to be a bit of a curse.

When you’re writing code for the back end, some things matter more than others. File size, for example, isn’t really a concern. Your code can get really long and it probably won’t slow down the execution. And if it does, you can always buy your way out of the problem by getting a more powerful server.

On the front end, your code should have different priorities. File size matters, especially with JavaScript. The code won’t be executed on your server. It’s executed on all sorts of devices on all sorts of networks running all sorts of browsers. If things get slow, you can’t buy your way out of the problem because you can’t buy every single one of your users a new device and a new network plan.

Now that JavaScript can run on the server as well as the client, it’s tempting to just treat the code the same. It’s the same language after all. But the context really matters. Some JavaScript that’s perfectly fine to run on the server can be a resource hog on the client.

And this is where it gets interesting with React. Because most of the things people like about React still apply on the back end.

React developers

When React first appeared, it was touted as front-end tool. State management and a near-magical virtual DOM were the main selling points.

Over time, that’s changed. The claimed speed benefits of the virtual DOM turned out to be just plain false. That just left state management.

But by that time, the selling points had changed. The component-based architecture turned out to be really popular. Developers liked JSX. A lot. Once you got used to it, it was a neat way to encapsulate little bits of functionality into building blocks that can be combined in all sorts of ways.

For the longest time, I didn’t realise this had happened. I was still thinking of React as being a framework like jQuery. But React is a framework like Rails or Django. As a developer, it’s where you do all your work. Heck, it’s pretty much your identity.

But whereas Rails or Django run on the back end, React runs on the front end …except when it doesn’t.

JavaScript can run on the server, which means React can run on the server. It’s entirely possible to have your React cake and eat it. You can write all of your code in React without serving up a single line of React to your users.

That’s true in theory. The devil is in the tooling.

Priorities

Next.js allows you to write in React and do server-side rendering. But it really, really wants to output React to the client as well.

By default, you get the dreaded hydration pattern—do all the computing on the server in JavaScript (yay!), serve up HTML straight away (yay! yay!) …and then serve up all the same JavaScript that’s on the server anyway (ya—wait, what?).

It’s possible to get Next.js to skip that last step, but it’s not easy. You’ll be battling it every step of the way.

Astro takes a very different approach. It will do everything it can to keep the client-side JavaScript to a minimum. Developers get to keep their beloved JSX authoring environment without penalising users.

Alas, the collective inertia of the “modern” development community is bound up in the React/Next/Vercel ecosystem. That’s a shame, because Astro shows us that it doesn’t have to be this way.

Switching away from using React on the front end doesn’t mean you have to switch away from using React on the back end.

Why use React?

The titular question I asked is too broad and naïve. There are plenty of reasons to use React, just as there are plenty of reasons to use Wordpress, Eleventy, or any other technology that works on the back end. If it’s what you like or what you’re comfortable with, that’s reason enough.

All I really care about is the front end. I’m not going to pass judgment on anyone’s choice of server-side framework, as long as it doesn’t impact what you can do in the client. Like Harry says:

…if you’re going to use one, I shouldn’t be able to smell it.

Here’s the question I should be asking:

Why use React in the browser?

Because if the reason you’re using React is cultural—the whole team works in JSX, it makes hiring easier—then there’s probably no need to make your users download React.

If you’re making a single-page app, then …well, the first thing you should do is ask yourself if it really needs to be a single-page app. They should be the exception, not the default. But if you’re determined to make a single-page app, then I can see why state management becomes very important.

In that situation, try shipping Preact instead of React. As a developer, you’ll almost certainly notice no difference, but your users will appreciate the refreshing lack of bloat.

Mostly though, I’d encourage you to investigate what you can do with vanilla JavaScript in the browser. I totally get why you’d want to hold on to React as an authoring environment, but don’t let your framework limit what you can do on the front end. If you use React on the client, you’re not doing your users any favours.

You can continue to write in React. You can continue to use JSX. You can continue to hire React developers. But keep it on your machine. For your users, make the most of what web browsers can do.

Once you keep React on the server, then a whole world of possibilities opens up on the client. Web browsers have become incredibly powerful in what they offer you. Don’t let React-on-the-client hold you back.

And if you want to know more about what web browsers are capable of today, come to Web Day Out in Brighton on Thursday, 12th March 2026.

Have you published a response to this? :

Responses

Kim Johannesen

@adactio “Next.js and Nuxt allow you to write in React”

Actually, Nuxt is for Vue.js and not for React, but the point still stands.

Kevin Powell

Nice one, Jeremy. The inertia is definitely what’s kept it going. The somewhat frustrating part here is most experienced React devs could jump into an Astro or Svelte project and probably be comfortable quite quickly.

# Posted by Kevin Powell on Wednesday, November 26th, 2025 at 1:28pm

Kevin Powell

Speaking with a few people in the industry, part of the problem also seems to revolve around tech bros thinking “but why would you do more work for no reason?” in offloading the JS from the client. Startup culture isn’t for me 😅

# Posted by Kevin Powell on Wednesday, November 26th, 2025 at 1:28pm

rem / Remy Sharp

My reply is too short for a blog post (or at least on my blog it is). Why use React? Same answer to the question: why eat McDonnalds (or drink Starbucks). It’s shit, but it’s everywhere AND a lot of people, understandably, aren’t familiar with the alternatives.

Konnor Rogers

From a lot of people I’ve talked to, it’s also about the “ecosystem”, you can find a package to do just about anything you need. it’s the available component libraries like ShadCN, React Aria, etc. that they’re comfortable with.

a11yweekly.com

Featured: An accessible pagination pattern (or two)

“It was an interesting delve into the various designs and markup patterns for pagination. At its simplest, pagination requires that the user:

  • Has a mechanism to navigate from page to page
  • Understands their current position within the pages”

Read more of An accessible pagination pattern (or two)

Sponsored: See accessibility issues right on your live website

AAArdvark’s Visual Mode lets you highlight accessibility issues directly on your site and log manual findings with speed and clarity. Get human-readable guidance for fixing each issue - no guesswork, no jargon. Track remediation progress and collaborate with your team all in one place. Perfect for teams who want accessibility testing that actually makes sense.

Try Visual Mode in your free workspace.

News, resources, tools and tutorialsNew to A11y

Homer Gaines writes about ablism and the product manager’s role in combating it. It turns out a product manager can make a big impact by keeping accessibility top of mind.

Suggestions and corrections

Have a suggestion for something to be included in Accessibility Weekly? Did I make a mistake that doesn’t belong on the Internet? You can either reply to this email or send a note to [email protected].

Sponsorships and donations

You can sponsor Accessibility Weekly! For details, check out the sponsor page. If you or your company is interested, send a note to [email protected].

If you enjoy the newsletter, consider making a donation.

SubscribeEmail address Subscribe

# Monday, December 1st, 2025 at 1:00pm

13 Shares

# Shared by Rich Holman on Wednesday, November 26th, 2025 at 12:52pm

# Shared by biou on Wednesday, November 26th, 2025 at 1:22pm

# Shared by Wayne Myers on Wednesday, November 26th, 2025 at 1:22pm

# Shared by Richard MacManus on Wednesday, November 26th, 2025 at 1:22pm

# Shared by Nilesh Prajapati on Wednesday, November 26th, 2025 at 1:23pm

# Shared by solastalgia kris on Wednesday, November 26th, 2025 at 2:28pm

# Shared by rem / Remy Sharp on Wednesday, November 26th, 2025 at 4:57pm

# Shared by Mastro.{js,ts} on Wednesday, November 26th, 2025 at 5:58pm

# Shared by Evil Jim O’Donnell on Wednesday, November 26th, 2025 at 5:58pm

# Shared by Alexander Lehner on Wednesday, November 26th, 2025 at 9:59pm

# Shared by Roberto Baca on Thursday, November 27th, 2025 at 1:34am

# Thursday, November 27th, 2025 at 3:55am

# Shared by Giuseppe Pizzimenti on Thursday, November 27th, 2025 at 3:39pm

36 Likes

# Liked by Rich Holman on Wednesday, November 26th, 2025 at 12:52pm

# Liked by George Rodier on Wednesday, November 26th, 2025 at 12:52pm

# Liked by Wayne Myers on Wednesday, November 26th, 2025 at 1:22pm

# Liked by Richard MacManus on Wednesday, November 26th, 2025 at 1:22pm

# Liked by Reimar on Wednesday, November 26th, 2025 at 1:22pm

# Liked by Marion Dagang on Wednesday, November 26th, 2025 at 1:22pm

# Liked by Nilesh Prajapati on Wednesday, November 26th, 2025 at 1:23pm

# Liked by Shaun Bent on Wednesday, November 26th, 2025 at 1:23pm

# Liked by https://feed.city/c/dan on Wednesday, November 26th, 2025 at 1:37pm

# Liked by Joshua @ZeldaUniverse on Wednesday, November 26th, 2025 at 1:54pm

# Liked by Kevin Powell on Wednesday, November 26th, 2025 at 1:54pm

# Liked by David Bushell ☕ on Wednesday, November 26th, 2025 at 1:54pm

# Liked by Jeremias Menichelli on Wednesday, November 26th, 2025 at 1:54pm

# Liked by Mark Wilkinson on Wednesday, November 26th, 2025 at 2:20pm

# Liked by Daniel Göransson on Wednesday, November 26th, 2025 at 2:27pm

# Liked by איגוד העורכים - איגוד מקצועות on Wednesday, November 26th, 2025 at 2:54pm

# Liked by Miks Silis on Wednesday, November 26th, 2025 at 3:16pm

# Liked by Noam Rosenthal on Wednesday, November 26th, 2025 at 4:57pm

# Liked by Thomas Broyer on Wednesday, November 26th, 2025 at 5:31pm

# Liked by Andy Davies on Wednesday, November 26th, 2025 at 5:31pm

# Liked by Mastro.{js,ts} on Wednesday, November 26th, 2025 at 5:57pm

# Liked by Josh Humble on Wednesday, November 26th, 2025 at 5:57pm

# Wednesday, November 26th, 2025 at 6:25pm

# Liked by Loren Stewart on Wednesday, November 26th, 2025 at 6:25pm

# Liked by Duffeh on Wednesday, November 26th, 2025 at 6:26pm

# Liked by Jason Neel on Wednesday, November 26th, 2025 at 8:12pm

# Liked by Jordi Sánchez on Wednesday, November 26th, 2025 at 8:48pm

# Liked by Richard Rutter on Wednesday, November 26th, 2025 at 9:15pm

# Liked by Alexander Lehner on Wednesday, November 26th, 2025 at 9:59pm

# Liked by Ilja on Wednesday, November 26th, 2025 at 11:58pm

# Liked by Roberto Baca on Thursday, November 27th, 2025 at 1:34am

# Thursday, November 27th, 2025 at 3:55am

# Liked by DHeadshot's Alt on Thursday, November 27th, 2025 at 5:22am

# Liked by geeky Chakri 🚀 on Thursday, November 27th, 2025 at 6:57am

# Liked by Accessabilly on Thursday, November 27th, 2025 at 1:27pm

# Liked by Mike Mathew on Monday, December 1st, 2025 at 6:11pm

Related posts

Whatever works for you

There are many ways to style a cat.

Progressively enhancing maps

How I switched to high-resolution maps on The Session without degrading performance.

Responsibility

Fear of a third-party planet.

Speedy tunes

Improving performance on The Session.

Performance and people

When it comes to web performance, there are technical issues and then there are human issues.

Related links

The Neverending Story

Since the early days of the web, large corporations have seemingly always wanted more than the web platform or web standards could offer at any given moment. Whether they were aiming for cross-platform-compatibility, more advanced capabilities, or just to be the one runtime/framework/language to rule them all, there’s always been a company that believes they can “fix” it or “own” it.

Applets. ActiveX. Flash. Flex. Silverlight. Angular. React.

Tagged with

HTML Web Components: An Example - Jim Nielsen’s Blog

Here’s an excellent case study of an HTML web component. Jim starts by showing how you’d create the component in React; then he shows how you’d do it as a JavaScript web component; finally he shows the way to do it as an HTML web component:

The point is we’re starting with a baseline, core experience that will provide basic functionality and content to a wide array of user agents before any JavaScript is required.

Once you’ve done everything you can in vanilla HTML to provide core elements of your baseline experience, you can begin enhancing the existing markup with additional functionality.

This is where HTML web components shine.

Tagged with

How to (not) make a button - Tomas Pustelnik’s personal website

A demonstration of how even reinventing a relatively simple wheel takes way more effort than it’s worth when you could just use what the brower gives you for free.

Tagged with

The radium craze | Eric Bailey

The radioactive properties of React.

Tagged with

as days pass by — Hammer and nails

We don’t give people a website any more: something that already works, just HTML and CSS and JavaScript ready to show them what they want. Instead, we give them the bits from which a website is made and then have them compile it.

Spot-on description of “modern” web development. When did this become tolerable, much less normal?

Web developers: maybe stop insisting that your users compile your apps for you? Or admit that you’ll put them through an experience that you certainly don’t tolerate on your own desktops, where you expect to download an app, not to be forced to compile it every time you run it?

Tagged with

Previously on this day

7 years ago I wrote Prototypes and production

Don’t build prototypes with a production mindset. Don’t release prototype code into production.

23 years ago I wrote whoRepresents . .?

That is one unfortunate choice for a domain name.