TL;DR: It's not what you might think.
Most articles compare the technical aspects of the two, but in our opinion, that’s wrong. Both Angular and React allow you to build big, complex, rich-ui applications, support mobile platforms, enable server rendering, and have great ecosystems with third-party libraries.They will provide similar outcomes. Both have developers on the market, and allow for terrible code if done improperly. So, the main differences between the two are cultural and conceptual rather than technical. Points A and B are the same, but the way to get from A to B would be completely different with Angular vs. React.
Usually, when making a conceptual comparison, developers come to this conclusion: Angular provides everything out-of-the-box, but it’s more rigid. React is more of a "build your own stack" solution. After all, Angular is a framework that provides most aspects of modern apps (server communication, etc.) and React is a library that only solves the UI part of the problem, so you have to come up with your own set of tools.
While technically true, in practice this comparison is shallow and inaccurate. In the case of Angular, you might still use solutions that are not provided by the framework (like ngRx for stage management), and in the case of React, there are popular libraries that have been adopted by the community as more or less of a "de facto" toolkit for developing apps.
The most significant difference between Angular and React is the state of mind of the people and companies adopting it. Angular provides structure. Regardless if developers love it or hate it, and whether or not it takes more or less time to develop an app, it still pushes its way of doing things with the built-in CLI and tsconfig that solves the problem of bikeshedding on what practices to adopt. This attitude perfectly fits large companies with dozens of development teams that don't "move fast and break things." These companies usually build apps with the long-term maintenance of legacy code in mind.
React presents a different situation, where it solves only one problem well (UI layer), and leaves the rest to the developer to figure out. A more open framework would be convenient for good developers because they can tailor solutions to specific problems they are trying to solve, and could be more flexible in choosing which tools to work with. It’s a freer state-of-mind where exploring different approaches to come up with the best solution is more common.
Learning Angular tools could be compared to learning the common third-party tools you would use with React. Angular’s learning curve focuses mostly on Angular itself, while React's learning curve is made up of basic concepts of development.
Developers can build web and mobile, complex, performant, sustainable applications with both solutions. However, in our opinion, Angular fits particular types of organizations, while React fits the rest. We usually don't start with the question of "which one should I choose," but rather "is Angular a good fit for your organization?" If yes, you can consider the pros and cons; otherwise, you should be able to find success with React as of now (September, 2018).
Answering “yes” to any of the following questions increases the chances of Angular being a good fit for your organization:
P.S. If you are looking to migrate from AngularJS, don't be mistaken by a similar name. Despite the similarities in the name, rewriting an app from AngularJS would be equally hard and resource-heavy for both Angular and React. Both are entirely new frameworks with new ideas, so don't use the "more natural upgrade path" as one of the points for consideration, because in practice, it’s not true.
Have React questions? Enroll in React Clinic, free consultation sessions hosted by us. We’ll come to your office or you can meet us in NYC at the Empire State Building in our offices for a one hour review of your code or questions.