Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

> React is under-appreciated in some circles of the fast-moving JavaScript world, where people are somehow expected to rewrite all their code from scratch every couple of years or so, after somebody starts shouting "framework X is dead", and everybody starts focusing on the new hotness.

Has this ever really been the case in the past 10 years?



No, and not before that either. It’s a bizarre thing to say, honestly. React is used near universally, despite there being alternatives that are better in almost every way. That is the opposite of being under appreciated. Hype about a new technology, deserved or not, doesn’t mean that everyone is throwing their old code away, especially not their jobby job code.


I think it's because around 2015 or so there was a lot happening with front end frameworks, and the sentiment comes from then and people have just not updated their priors since.

AngularJS was pretty popular at the time, Angular 2 migration was looming, backbone still existed, jQuery (standalone or paired with both) was going strong, Polymer hit 1.0 and it looked like Web Components might actually be something and useful, React was gaining a lot of popularity, Vue was gaining a small amount of popularity, svelte an even smaller amount, Meteor was somewhat popular and had its own front end library.

Of course in addition to all that, traditional server rendered sites were more popular then than now and there were even more options there.

However, React quickly became pretty much the default. Not that there's 0 churn there. The "right way" to do React has changed quite a bit in the last decade. And early on before all the libs people liked to glue together somewhat matured/settled it was common to have to replace stuff that just got abandoned.

More than once I had to pick up someone's old unmaintained project to do a bug fix only to find I couldn't even get the project to install/run because it was in the pre auto lock file era and nobody ever ran `npm shrinkwrap`


Let's not conflate the two things that were said.

It is absolutely true that companies were rushing to rewrite their code every few years when the new shiny JS library or framework came out. I was there for it. There was a quick transition from [nothing / mootools?] to jQuery to Backbone to React, with a short Angular detour about 13 years ago. If you had experience with the "new" framework you could pretty much get a front-end gig anywhere with little friction. I rewrote many codebases across multiple companies to Backbone during that time per the request of engineering management.

Now, is React underappreciated? In the past 10 years or so I've started to see a pattern of lack of appreciation for what it brings to the table and the problems it solved. It is used near universally because it was such a drastic improvement over previous options that it was instantly adopted. But as we know, adoption does not mean appreciation.

> React is used near universally, despite there being alternatives that are better in almost every way.

Good example of under-appreciation.


Having worked in both over the years the main technical thing React had going for it over Vue, in my humble opinion, was much better Typescript support. Otherwise they are both so similar it comes down to personal preference.

However 0 of the typescript projects (front and back end) I've worked one (unless I was there when they started) used strict mode so the Typescript support was effectively wasted.


No, I was also around when React was new, moving to it from tangles of jQuery and Backbone. I absolutely know React brought several lasting innovations, in particular the component model, and I do appreciate that step change in front-end development. But other frameworks have taken those ideas and iterated on them to make them more performant, less removed from the platform, and generally nicer to work with. That is where we are today.

I agree that there was a period where many organizations did rewrite their apps from scratch, many of them switching to React, but I think very few did it ”every couple of years”, and I think very few are doing it at all today (at least not because of hype - of course there might always be other reasons you do a big rewrite). We should not confuse excitement about new technologies for widespread adoption, especially not in replacing existing code in working codebases.


I read parent's comment as an assertion that the current "fast-moving JavaScript world" expects everyone to rewrite their app. Personally I've never seen this, but since React became popular ~13+ years ago, I struggle to believe this has actually been true for others in any meaningful way.


Mootools is still around! "Copyright © 2006-2025". I don't know anyone who uses it, but glad it see it's still going.

https://mootools.net/core


MooTools also features in the infamous SmooshGate:

https://developer.chrome.com/blog/smooshgate


> the opposite of being under appreciated

> despite there being alternatives that are better in almost every way.

This right here is the under appreciation. The new way to signal to others on forums that you are a really really great dev seems to be to bring up how much better some bizarro templating engine that abuses a niche JS language feature is.


React has fundamental problems that lead to both:

- horrible performance characteristics

- needless complexity

These are not tradeoffs, these are bugs. We don't gain anything from them.

That's why React introduced a compiler. Because problem 1 is a big deal. But it's not a code problem, it's a React problem. Other tools simply do not have that bug. Which is why the exact same react code can be compiled and run much faster.


You haven't described those "fundamental problems" that you call bugs, but I think these are irrelevant for me from a ClojureScript point of view. As an example, immutable data structures mean that equality comparisons are cheap and I can often avoid re-computing and re-rendering huge parts of the tree.

More importantly, I don't have a React performance problem. I don't really need "much faster".


> More importantly, I don't have a React performance problem. I don't really need "much faster".

Sure, but ultimately you're using a library with performance bugs that lead to orders of magnitude more rendering than necessary.

If you don't mind the buggy software, that's fine. It's still buggy.


I'm curious what makes a template language bizarro, and why JSX is or is not bizarro?


JSX is just sugar around JavaScript, and interops nicely with it. I'm okay with that. The more I write JSX, the better I become at the programming language I'm using. Concepts and patterns in JS can be adopted in my components.

If I learn Vue's templating language, then I'm spending my time learning a system with no wider applicability, a much narrower tooling space, that doesn't utilise my previous or future experience from JS. That's not a good calculus for me.


I don't understand how Jsx is syntax sugar in a way that vue templates aren't. Neither of them are valid JavaScript but they both compile to it.


A concrete example then. Commonly want to prevent form submission default behaviour.

Vanilla

  <script>
    const form = document.getElementById("form");
    form.addEventListener("submit", event => event.preventDefault())
  </script>
  <form id="form">...</form>
React

  <form onSubmit={event => event.preventDefault()}>...</form>
Vue

  <form @submit.prevent="onSubmit">...</form>
React's API has guided the developer to learn about events. If they move outside the React ecosystem they have transferable knowledge. As someone unfamiliar with React, but used to the DOM you're surely comfortable here. Yes, the syntax isn't identical to how you might use this in vanilla JS, but it's clearly the same concept. It's just been made a little nicer to use - the sugar.

Vue's API has reinvented the wheel. There's one place this syntax is useful and one place alone - Vue itself. It hasn't used my existing knowledge, or pushed me to become more familiar with the platform upon which I'm building. That's not sugar, that's a new language.

I've probably got the vanilla example wrong - when you don't do it frequently it's not the most ergonomic thing in the world. React takes that API, doesn't deviate far from it, and makes it easier to use. Sugar.


Fun example! Strange conclusion. React actually uses a synthetic event system that is subtly different from the native one in all kinds of little ways. In reading the docs it’s hard to even get an overview of what’s different. Bubbling is a bit different, onChange works like the input event for some reason, various props and methods have been added. This is not the case for Vue! It just uses standard events.

The .prevent modifier in Vue is completely optional, you can call .preventDefault() yourself. Note that React also uses a kind of modifier but only for capturing events (onClickCapture etc). It does not have any way that I know to add a passive event, for some reason.

Vue is the one that actually offers syntax sugar, and does so much more consistently, with the semantics identical to the browser. React changes the semantics for unclear, historical reasons, and then adds half-baked syntax sugar on top.


I'm not claiming React is perfect by any means, and like any popular relatively longstanding project is is bound by sometimes unwise historical decision. It just seems to be currently in vogue to take a pop at it. If you want to extol the virtues of Vue/Svelte/whatever then great, but React is still IMO a great option and deserves some defense.


This seems like a very hostile and uninformed take on the alternative tools.

Have you tried building anything with Vue or Svelte recently?

Can you provide some concrete issues you ran into beyond them being “bizarro”?


I consider this example fundamentally broken, in a non-obvious way that reflects, in my opinion, a poor API choice.

  <script>
    let numbers = $state([1, 2, 3, 4]);

    function addNumber() {
      numbers.push(numbers.length + 1);
    }

    const sum = numbers.reduce((x, y) => x + y, 0);
  </script>

  <p>{numbers.join(' + ')} = {sum}</p>

  <button onclick={addNumber}>
   Add a number
  </button>


React often gets lumped into general JavaScript hatred of the form “the entire ecosystem of tooling/frameworks/libraries changes every few months.” That’s despite React existing for one third the lifetime of the World Wide Web. React is older now than jQuery was when React was first released.


Although aside from JSX, so much has changed it could’ve been a new framework at least once, and part of its longevity is that it doesn’t bundle a router, form handling, etc, and the popular ones of these have changed many times.


The "in some circles of the fast-moving Javascript world" is important - they're not saying everyone or even most, they're saying proponents of the "better" systems (who do rewrite regularly) dismiss React's stability as unimportant or indicating it's dead when it's not.


well ironically it happened when react came on to the scene. Many react rewrite projects (from jquery with handlebar like templates, angular 1 etc)


No and I say it's actually the exact opposite.

Its gotten so bad that when I read FE dev I interpret it as "React Dev".


Really feels like react has held back frontend development. The idea that everything on the web should be written in react is baffling but I'm sure people thought similar thoughts when jquery or angular were popular.


Forget the underlying language, the real shift was this idea that every website should be a single page application, which we are now moving away from again but seemingly everyone has forgotten how to do it, so it's being done "the React way".


This could be because of developer fatigue and the trend of forcing backend devs to do fullstack.

Its very hard to keep up with the frequent changes to programming models, new frameworks, CSS libraries (why the heck are they soo many?!) when you also have to design O(Log n) backends, IaC, Observability, LLMOps, etc.

I have come to a compromise and have started advocating for React/Redux/TS/NextJS as the default CRUD application stack so that I can focus on solving real CS problems in the backend that I’m passionate about.


But react is where developer fatigue is most endemic. Since it only does one thing, that typically means you have to import a dozen other libraries that are mostly "flavors of the month" captured in time. You can easily tell when a react project was started based solely on it's dependencies. This is bad because it typically means no two react projects will use the same dependencies.

These dependencies are the root of the issue.

FWIW, I've only ever professionally work with react on the frontend. For nearly 10 years too. My first job I was doing react.createElement() before classes were shortly introduced afterwards.

It's time that we move on to something better, and the react foundation being controlled by private entities while not being an actual democratic foundation is a good omen of what to expect.


> Since it only does one thing, that typically means you have to import a dozen other libraries that are mostly "flavors of the month" captured in time.

By weird happenstance I got a job writing in a half-dead, compiles-to-JS language 5 years ago. There's one way to handle state in it. My view on the libraries you need to handle everything-but-view in React has been "I'll come back to these when the dust settles" and it just never settles.


>> Really feels like react has held back frontend development

Why? How?

>> but I'm sure people thought similar thoughts when jquery or angular were popular

I loved jQuery back in the day, and it helped bringing some native APIs to life thanks to its popularity.


> The idea that everything on the web should be written in react

Says who? There are plenty of choices: vanilla, Lit, Vue, Svelte, Angular, Riot, etc. Some of the alternatives are very good.


None of these have usage numbers that rival react, at least not in the US. I wish it were so because many react libraries can easily support other view libraries with minor modifications to decouple it from react.


Agreed, its become its own terrarium like ecosystem at this point.


Is that so bad though? The major alternatives to React are close enough to React that a competent React dev won’t have much troubling contributing. If you need to hire an expert in Vue or Svelte or even React, you should probably put that in the job description rather than hope that “FE dev” would somehow convey what you want.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: