hand holding react sticker

The Good, the Bad, and the Ugly: My Experience with React

Yesterday, I started looking into React after a colleague’s recommendation. As a dedicated Angular developer (when it comes to front-end — GOD I HATE FRONTEND), I initially approached React with significant skepticism. Now? I’m not so sure where I stand, but my perspective has definitely shifted. Before diving deeper into my experience, I should mention that since Meta maintains React and has integrated some telemetry features, I remain somewhat cautious as a privacy-conscious developer.

Context

For context, I’ve spent years building front-end/cross-platform solutions with Angular. Its comprehensive structure, TypeScript integration, and enterprise-ready tooling have always given me confidence when tackling complex projects. I appreciate frameworks that provide clear guidelines and structured approaches to development, which is why Angular has been my go-to solution.

However, after hearing constant praise for React from colleagues and seeing its dominance in job listings, I decided it was time to honestly evaluate it myself rather than dismissing it based on hearsay or outdated information.

And I do like to break the rules sometimes, and react seems to do it without a sweat (jsx…).

The Good

Component Architecture That Actually Makes Sense

React’s approach to components feels natural and intuitive. Breaking UI elements into self-contained, reusable pieces aligns perfectly with how I mentally model interfaces. While Angular has components too, React’s implementation feels lighter and more focused on this core concept.

JSX: Weird But Strangely Satisfying

I never thought I’d enjoy writring HTML-like syntax directly in my JavaScript, but there’s something oddly satisfying about JSX. The tight coupling brgic creates a coherent development experience that, against all my expectations, I’ve found myself enjorying. Don’t get mad at me for saying it’s weird – it definitely is, but in a good way!

Scrimba and Bob: A Learning Experience Worth Having

Learning resources matter tremendously when picking up a new technology, and I’ve been fortunate to find Scrimba, where Bob’s teaching approach has made this journey significantly more pleasant. His explanations and practical examples have been instrumental in helping me see the value in React’s approach.

Vite Makes Development Feel Modern

The development experience with Vite is nothing short of impressive. Hot module replacement works seamlessly, and the build times make Angular’s compilation feel positively archaic in comparison. This alone might be worth the price of admission for some projects.

Philosophical Alignment With My Own Ideas

Interestingly, React’s core principles align closely with ideas I explored in my own front-end research project (srf-js). This philosophical resonance makes learning React feel like discovering a more polished, community-backed version of concepts I’ve already considered and believed in.

Open Source Community That Feels Alive

Despite Meta’s backing, the vibrant open-source community around React is genuinely impressive. The ecosystem feels alive with constant improvements, innovative patterns, and passionate developers creating everything from utility libraries to comprehensive solutions for common problems.

The Bad

Meta’s Involvement Raises Privacy Red Flags

My primary reservation stems from Meta’s stewardship. Their track record with privacy and data handling leaves much to be desired, and I remain uncomfortable with their involvement in React. While the code is open source, the direction and priorities are still influenced by a company whose business model revolves around data collection.

Asset Management Feels Unnecessarily Complicated

The approach to handling assets in React feels awkward compared to what I’m used to. Having to either use absolute paths or import images directly into the code seems unnecessarily complicated and verbose. Why can’t we have a simpler, more intuitive approach to this fundamental aspect of web development?

Enterprise Readiness Is Questionable

Despite many large companies using React, I question whether it’s truly ready for enterprise-scale applications out of the box. Angular’s comprehensive approach to modularity, dependency injection, and integrated tooling still feels more appropriate for complex organizational needs. React often requires cobbling together various libraries to achieve what comes standard in more opinionated frameworks.

CSS Approach Fragmentation Creates Decision Fatigue

The multiple competing approaches to styling (CSS modules, styled-components, Emotion, Tailwind, etc.) create unnecessary decision fatigue compared to Angular’s more opinionated styling approach. Every React project seems to reinvent the wheel when it comes to styling, leading to inconsistent codebases and onboarding challenges.

Testing Setup Requires Too Much Configuration

Setting up comprehensive testing for React applications often requires more configuration and additional libraries compared to Angular’s integrated testing utilities. What should be a straightforward aspect of development workflow becomes yet another series of decisions and setup steps.

The Ugly

React Native: A Promise That Falls Short

React Native’s “write once, run anywhere” promise seems significantly oversold based on my research and conversations with developers who’ve used it extensively. For cross-platform development, I’d recommend using Capacitor with a standard React app for better flexibility and more predictable behavior. The compromises and workarounds required for React Native often negate its purported advantages.

State Management Gets Messy Quick

For anything beyond trivial applications, state management in React becomes a complex affair requiring additional libraries and patterns. While hooks have improved the situation, comparing the elegance of Angular’s reactive forms and services to the Redux/Context API/MobX ecosystem makes me appreciate Angular’s more integrated approach.

TypeScript Integration Feels Bolted-On

While TypeScript works with React, it doesn’t feel as seamlessly integrated as with Angular, where it’s a core part of the experience. The type definitions, especially for complex state management solutions, can become unwieldy and sometimes feel like they’re fighting against React’s more dynamic nature rather than complementing it.

Final Thoughts

These are my honest opinions after my initial exploration of React. Surprisingly, this experience has moved React up slightly in my personal framework rankings. The component model, development experience, and some of the core principles are genuinely impressive.

Will React replace Angular in my toolkit? Probably not, but I’m now open to using it for specific projects where its strengths align with the requirements. I’m considering trying it for one of my upcoming projects or perhaps rewriting my static blog with React to gain more hands-on experience.

What’s clear is that dismissing technologies without proper exploration is limiting. While I still have reservations about React, particularly regarding Meta’s involvement, I’m glad I took the time to form a more nuanced opinion based on actual experience rather than preconceptions.


Subscribe to my newsletter

Leave a Reply

Your email address will not be published. Required fields are marked *


ABOUT ME

Hey there! I’m Metin, also known as devsimsek—a young, self-taught developer from Turkey. I’ve been coding since 2009, which means I’ve had plenty of time to make mistakes (and learn from them…mostly).

I love tinkering with web development and DevOps, and I’ve dipped my toes in numerous programming languages—some of them even willingly! When I’m not debugging my latest projects, you can find me dreaming up new ideas or wondering why my code just won’t work (it’s clearly a conspiracy).

Join me on this wild ride of coding, creativity, and maybe a few bad jokes along the way!