Not a taste war, an operating-model choice
React is a library: minimal, assemble-your-own-stack, deepest hiring pool in the industry. Angular is a full framework: router, DI, forms, testing, conventions, opinionated by design. The choice predicts how your codebase behaves under team growth and staff rotation more than it predicts app quality.
React wins when
The team is senior or agency-backed (freedom compounds with discipline), hiring flexibility matters (React developers are everywhere), the product wants the widest ecosystem (React Native for mobile later, meta-frameworks like Next.js), or incremental adoption is the plan (React inside existing pages, growing outward).
Angular wins when
The org is enterprise-shaped: many developers, mixed seniority, long lifecycles, audit requirements. Angular's constitution, enforced structure, TypeScript by default, everything-included, keeps a 15-person codebase coherent where React's freedom would drift. Banks, insurers, gov-adjacent products live here happily.
The maintenance math
React: cheap to staff, discipline-dependent to keep clean, without conventions, every React codebase becomes its own framework (refactor bills arrive later, bigger). Angular: steeper onboarding per developer, near-zero architectural debate ever again, and major-version upgrades are scheduled work rather than chaos. Neither is cheap to maintain; they are cheap differently.
For buyers, the short version
Small senior team, product ambition, hiring optionality → React. Large rotating team, enterprise context, structure-over-freedom → Angular. Existing codebase wins all ties, rewriting for framework religion is the single most common paid mistake in this space. Either stack builds fine here; the recommendation follows the org, one conversation at a time.