Frontend / Angular / 02_angular_vs_react_and_vue.md

Angular vs React vs Vue

Updated 6 interview angles 5 min read source
On this page7
  1. The one-line distinction
  2. Where they have converged
  3. Where they genuinely differ
  4. What actually decides it
  5. The migration question
  6. Related
  7. Interview angle

Angular vs React vs Vue

The question is almost guaranteed when a job description lists all three. The weak answer ranks them. The strong answer explains what each optimises for and names the conditions under which you would pick each.

The one-line distinction

Its bet
React A library; you assemble the rest
Angular A framework; batteries and opinions
Vue A framework you adopt incrementally

React ships a view layer and leaves routing, data fetching, forms and state to the ecosystem. Angular ships all of it and expects you to use its versions. Vue ships official router and store packages but does not force them.

That single axis - how much the tool decides for you - predicts most of the other differences.

Where they have converged

Worth saying out loud, because it shows you track the field rather than repeating 2019 comparisons.

All three now use signal-style reactivity. Vue had it from the start with its proxy-based reactive system. Angular added signals. React took a different route - the React Compiler memoises automatically, which reaches the same goal of “do not recompute what did not change” from the other direction.

All three are component-based with one-way data flow as the default, and all three have first-class TypeScript support today.

So the interesting differences are no longer about rendering.

Where they genuinely differ

The same component, three ways

The difference is easiest to see side by side.

tsx
function Counter() {
  const [n, setN] = useState(0);
  return <button onClick={() => setN(n + 1)}>
    {n}
  </button>;
}
ts
@Component({
  standalone: true,
  template: `<button (click)="inc()">
    {{ n() }}
  </button>`,
})
export class Counter {
  n = signal(0);
  inc() { this.n.update(v => v + 1); }
}
vue
<script setup lang="ts">
const n = ref(0);
</script>

<template>
  <button @click="n++">{{ n }}</button>
</template>

Templates versus JSX

React uses JSX: the template is JavaScript, so loops and conditionals are ordinary language constructs. Angular and Vue use templates with their own syntax - @if blocks, v-if directives.

Note how similar the reactive state is now - useState, signal, ref are the same idea with three spellings. The structural difference is the class and decorator Angular requires, versus the function React and Vue settle on.

The trade is real in both directions. JSX has the full language available and one mental model. Templates are statically analysable, which is how Angular and Vue compile them to optimised render functions and catch some errors at build time that JSX cannot.

Dependency injection

Only Angular has it as a first-class feature. In React you pass props or use context; in Vue you use provide/inject or a store. Angular’s hierarchical injector is the closest thing in frontend to a backend service container, and it changes how testing works - you override a provider rather than mock a module.

For someone coming from FastAPI or Spring this is the most familiar part of Angular and worth naming as such.

Opinion and team scale

Angular’s uniformity is the argument for it on large, long-lived, multi-team codebases: two Angular projects look alike, the CLI generates the same structure, and upgrades come with automated migrations (ng update).

React’s flexibility is the argument for it when the team wants to choose, or when the ecosystem has a better answer than any bundled one. The cost is that two React codebases can share almost no conventions.

Vue sits between: sensible defaults, less ceremony than Angular, more structure than React.

What actually decides it

Nearly always the team and the ecosystem, not the framework’s merits. Say this, because it is true and it is what a senior answer sounds like:

  • What the team already knows dominates any framework difference.
  • What the hiring market near you supplies.
  • What the surrounding stack expects - Next.js pulls toward React, and an enterprise .NET shop often already has Angular.
  • Whether the app is a long-lived internal platform, which favours Angular’s uniformity, or a product surface iterating fast, which favours React’s flexibility.

Rewriting a working frontend to change framework is almost never justified by the framework alone, and saying so is a better signal than picking a favourite.

The migration question

If asked how to move between them, the answer is that the component model transfers and the surrounding infrastructure does not. Rendering logic maps almost directly. What has to be rewritten is routing, forms, HTTP, state management and testing - which is precisely the part Angular bundles and React does not.

Interview angle 6

  • “React, Angular or Vue?” - they differ mainly in how much they decide for you. React is a view library you assemble around; Angular is a framework with routing, HTTP, forms, testing and DI included and expected; Vue is a framework you can adopt incrementally. Ranking them is the weak answer.
  • “How have they converged?” - reactivity. Vue was always proxy-based, Angular added signals, and React reaches the same end through the compiler memoising automatically. All three are component-based with one-way data flow and strong TypeScript support, so rendering is no longer the interesting difference.
  • “Templates or JSX?” - JSX makes the template ordinary JavaScript, so the full language and one mental model are available. Templates are statically analysable, which lets Angular and Vue compile to optimised render functions and catch template errors at build time.
  • “What does Angular have that the others do not?” - hierarchical dependency injection as a first-class feature, the closest frontend equivalent to a backend service container. It changes testing: you override a provider instead of mocking a module.
  • “When would you pick Angular?” - large, long-lived, multi-team codebases where uniformity and automated upgrade migrations are worth more than flexibility, and organisations already standardised on it. Pick React when the team wants to choose its own pieces or the surrounding stack pulls that way.
  • “How hard is it to move between them?” - the component model transfers almost directly; routing, forms, HTTP, state and testing have to be rewritten. That surrounding infrastructure is the real cost, and it is exactly what Angular bundles and React leaves open.