I still like Angular, but I fell in love with React and its ecosystem (tooling and libraries), simplicity (concept of components as functions from the state to UI), and flexibility (you can set up and tune your project as you see fit).
How did this decision come to be?
After 2.5 years of working as a front-end developer, I decided to look for a new job. It was a decision driven by my desire to learn and grow.
I came to the conclusion that changing perspectives in the early stage of your career seems healthy. Participating in different projects lets you learn a lot about different approaches companies take, solutions they use, and practices they follow.
This approach is a representation of the "perspective-driven self-development" I wrote about some time ago.
From day one that I decided to look for a job I knew I wanted to work with React (and overall different technologies than before, at best) and strived towards this goal. I did that despite the number of Angular offers I was bombarded every week and companies rejecting me because of my lack of experience with this technology. I started to learn React not long after starting working with Angular. I did it in my free time, just out of curiosity. During job interviews, it was hard to convince people that I have the abilities needed for the job. Every time I felt somewhat ashamed and tired repeating the same dialogue over and over:
"So, you want to work with React, but you have no commercial experience?"
"Unfortunately not... Only the things I've learned myself."
(... And after the further elaboration on my ways of learning the technical interview started.)
That's when I thought about ways of proving myself and strengthening my knowledge even more. I decided to use the oldest trick in the world - I started a side-project. But not a typical one - a one that, by the end, will be a full-blown product. Thoroughly designed, implemented, and finally - deployed to production where everybody would see it. (I almost completed it so no announcements for now!)
But let me get to the point. I want to share with you my thoughts on the technicalities behind my decision. I want to compare Angular and React and share my point of view with you.
What I don't hate about Angular?
Let me get this straight - I still like Angular! It didn't bore or anger me in any way so that I decided to leave it behind. I don't cast aside the idea of me coming back to it one day.
What's good about Angular? It is still in the top 3 of most popular JS frameworks and not without a reason. It has a rich ecosystem of external libraries for solving problems related to web applications, enterprise or not (state management, component libraries, internationalization, etc.), tooling to make it easier and automate what's repeatable (Angular CLI, schematics, and CDK), and an active community.
Another thing is its opinionated architecture and tooling. Components, modules, services, etc. are separate "architecture pieces" by design and our projects (with its file structure) should also follow this "modularity" defined by the framework. Angular also provides solutions for solving typical problems concerning web applications - making HTTP calls, handling forms, linting, creating unit tests, etc. (Although, you can always opt-out and use other things.)
Why is it good to use something opinionated, like Angular? Because some architectural decisions are just there, already defined, ready to use. We don't have to bother making things up and worrying whether they will prove useful in the long term. I personally know a team that decided to use Angular just because of that and Angular proved to be a perfect choice for them. After a couple of years of development, they are still satisfied.
What also I absolutely adore is Angular's TypeScript integration out-of-the-box. I believe in TypeScript and like to use it in every project.
What do I love about React?
Angular and React are fundamentally different things - one is a framework, other is a library. Angular provides us tooling and certain patterns that we have to follow in order to create applications. React is different, it handles only a layer of our applications, that is responsible for rendering the UI.
So, what is the first reason why I fell in love with React so that I decided to "abandon" Angular? The reason is... That React is NOT opinionated.
Now I stirred things up! Let me explain - being "opinionated" is a power, but also a curse at the same time. It depends on perspective. Some people would find it refreshing to be stripped of some responsibilities, like coming up with a technological stack or project's architecture. On the other side of the barricade are people who enjoy the freedom of choosing their perfect and polished stack and practices, refined over the years.
How does it look with React? The structure of our project, what tooling to use, how to make HTTP calls, which testing framework to use - things like that are totally up to us. Which approach is better? That depends. (Haha.) That depends on your needs, experience and overall "beliefs".
From my point of view, after 2.5 years of working in front-end, I feel I started to mature and to establish my own ways I want to do things. There is nothing more enjoyable for me than working daily with a stack you feel the most powerful. (Recently I fell in love with a NextJS + ChakraUI + Firebase + Cloudinary combination.)
I also fell in love with React's functional components. The sheer idea of components being functions from the state to UI is very simple and powerful. React Hooks also feel like a good way to encapsulate and reuse logic throughout your applications. (Although some people that think those are bloated and incomprehensible in large projects, but I'm too inexperienced to have my own opinion about that.)
The present and the future
Like you can see, there is nothing I despise about Angular. I just happened to be enchanted by the concepts behind React so much, that it felt like a natural switch for me.