React Makes You a Bad Developer

When I started my programming journey, during college days it was all C# and .NET. It was structured, logical, and gave me a solid foundation in software development — or so I thought. Fresh out of college, armed with my degree and a naive sense of optimism, I stepped into the corporate tech world not knowing what to expect. That’s when React hit me like a freight train. I didn’t pick it. It was just there, waiting for me. Everyone was talking about it. My colleagues, blogs, job postings, and as a fresh grad, I figured it was the golden ticket.

I was just a wide-eyed newbie who didn’t know crap about the corporate tech world. I thought, “Okay, this is it, this is what I’m supposed to learn.” Big mistake. I stepped into programming with the wrong damn foot, and I’ve been tripping over myself ever since.

Don’t get me wrong. React isn’t inherently evil. It’s a powerful tool, and its popularity isn’t unwarranted. Back then I didn’t have the wisdom to question whether it was the right starting point for me. I just jumped in, thinking I’d landed on the cutting edge. Suddenly, I was no longer a developer crafting solutions from scratch. I was a React developer, tethered to a library that, in hindsight, I believe stunted my growth and made me a worse programmer.

Here’s my beef with React. It’s a crutch that lets you get away with not understanding the fundamentals. When I began, I didn’t properly learn JavaScript. The language that underpins everything in the React ecosystem. Instead, I learned React. It’s a library, not a language, yet it became my entry point into web development. That’s like learning to drive a car by starting with cruise control and never bothering to understand how the engine or other components work. Sure, you can get from point A to point B, but what happens when the road gets rough?

The Javascript Porblem (THE GAP)

React abstracts so much of JavaScript that you can write functional code without ever diving deep into the language itself. Need to manipulate the DOM? React’s got useState and useEffect for that. Want to handle events? Just slap an onClick handler on a component. You don’t need to wrestle with closures, master prototypal inheritance, or even understand how the event loop works. React does the heavy lifting, and while that’s great for productivity, it’s terrible for building a strong foundation.

I remember my first real project. A clunky dashboard for some internal tool. I got it working, felt like a rockstar, and didn’t even realize how little I understood. I’ve worked with React for years now in my corporate job, and I still feel like a fraud when it comes to vanilla JavaScript. Ask me to write a complex app in React, and I’ll churn it out no problem. Ask me to build the same thing without a framework, and even right now I might stumble a little. That’s not because I’m incapable, it’s because React robbed me of the chance to learn JavaScript the hard way.

Every developer should know how things work under the hood and why they work that way. React, and honestly most modern frameworks, shields you from that knowledge, leaving you dependent on its abstractions. I’ve got the muscle memory for React’s shortcuts, but I missed the fundamentals. That stings. Again it’s not React or Modern framework’s problem. But starting there as a newbie, it left me with gaps I’m still trying to fill.

JSX’s False Promises

JSX is React’s quirky little syntax that pretends to be HTML. The truth is it isn’t. . God, I fell for it hard at first. “Oh cool, HTML and JS in one place, this is genius!”. Combining markup and logic in one place felt intuitive. But the more I used it, the more I realized it’s a deceptive shortcut.

Take self-closing tags, for example. In HTML, <input> or <img> work just fine without a closing slash. In JSX, you have to write <input /> or <img />, or it throws a fit. It’s a small difference, sure, but it’s a symptom of a bigger issue. JSX lulls you into thinking you’re writing HTML when you’re not. It’s a custom syntax that mimics HTML but follows its own rules, and that disconnect creates a shallow understanding of both.

I’ve caught myself forgetting how to write plain HTML and CSS because I’ve spent so much time in React’s component driven world. HTML class becomes className, inline styles turn into JavaScript objects, and suddenly you’re not writing web code anymore. You’re writing React code. It’s a bubble that insulates you from the raw, messy reality of the web, and I think that’s a disservice to anyone trying to grow as a developer.

Event handling’s another one. onClick={handleClick} feels familiar, but it’s a lie. In vanilla JS, we have to use addEventListener and see the full picture of event propagation, the native event object. React’s synthetic events wrap all that up, and I didn’t even notice until I hit a wall debugging something outside its ecosystem. I’d been coasting, and it showed.

The Component Mindset Trap

React’s component based architecture is another double-edged sword. It’s marketed as a clean, modular way to build UIs, and it is, in a way. But it also warps how you think about programming logic. In a traditional setup, you might write a script that manipulates the DOM directly or orchestrates behavior across multiple elements. With React, everything gets funneled into components. Need a button to update a counter? Make a component. Need a form to validate input? Make another component. Before you know it, you’re breaking every problem into tiny, isolated pieces, even when a simpler, more cohesive solution might make sense.

This component obsession tricked me into over-engineering solutions. I’d spend hours splitting logic into reusable hooks and props, only to realize later that a few lines of vanilla JS could’ve done the job. React trains you to think in its terms. State, props, and lifecycle methods, rather than in the broader, more universal terms of programming. It’s like being handed a hammer and seeing every problem as a nail.

Conditional Rendering vs. Real Control Flow

Even something as simple as conditional rendering in React, like {isLoggedIn ? <Dashboard /> : <Login />} messes with your head. It looks like a ternary operator, a staple of programming, but it’s not really control flow; it’s a declarative shortcut. In vanilla JS, you’d use an if statement to append or remove elements from the DOM. React’s approach feels slick, but it distances you from understanding how the DOM actually gets built and manipulated. I started thinking of UI as a function of state rather than a sequence of operations, which sounds cool until you realize that it’s a React-ism, not a universal truth.

So now what?

I’m not trashing React completely, in reality even today I love it. It’s still my 9-to-5. It’s fine for pumping out most modern apps. Not to mention React isn’t the only culprit. Modern libraries and frameworks in general have a tendency to prioritize speed and convenience over depth. They’re built for scale, for teams, for shipping products fast. That’s fine for a seasoned developer who already knows the fundamentals and can wield these tools effectively. But for someone like me back then, starting out? It’s a trap. I didn’t learn how to build. I learned how to assemble pre-made parts. I didn’t master the craft; I mastered a toolkit.

That is the sour taste React left in my mouth and how it has left me to be a worse developer. I’ve been cheating my way through instead of earning it. I missed out on the gritty, hands-on learning I should’ve had, and I’m pissed about it. These days, I’m fighting back, digging into vanilla JS, poking at the DOM, even trying to learn new languages outside Javascript. It’s slow, and I stumble a lot, but it feels real. I’m finally figuring out what I should’ve known all along.

If I could rewind to that fresh out of college version of myself (or you who’s reading this and relating yourself), I’d say: skip React for now. Learn JavaScript. I mean really learn it. Build something ugly and functional with no frameworks. Get your hands dirty with the web’s quirks. Then, if you want, pick up React later. It’ll be a tool, not your whole identity. Because here’s what I’ve learned the hard way: React doesn’t make you a better developer. it makes you a better React developer. And for me, that’s not enough anymore.

0
Subscribe to my newsletter

Read articles from Nilesh Viduranga directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Nilesh Viduranga
Nilesh Viduranga

Gamer, React Developer