Menu

React vs Angular: differenze e quando scegliere ciascuno

React è una libreria per la UI da combinare con altri strumenti; Angular è un framework completo con routing, form, HTTP e dependency injection integrati. Confronta gli stessi componenti scritti in entrambi, uno accanto all'altro.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

React è una libreria JavaScript per costruire interfacce utente, e Angular è un framework completo per costruire applicazioni web. Con React scrivi i componenti come funzioni che restituiscono JSX e scegli strumenti separati per routing, form e dati; con Angular scrivi classi TypeScript con template HTML e hai già inclusi routing, form, un client HTTP e la dependency injection. Ecco lo stesso contatore in entrambi.

La versione Angular di quel componente:

import { Component, signal } from '@angular/core';

@Component({
    selector: 'app-counter',
    template: `
        <button (click)="increment()">Clicked {{ count() }} times</button>
    `,
})
export class CounterComponent {
    count = signal(0);

    increment() {
        this.count.update((n) => n + 1);
    }
}

Le idee corrispondono una a una: lo useState(0) di React è il signal(0) di Angular, onClick={...} è (click)="...", e {count} è {{ count() }}. La differenza è dove vive il codice: una funzione che restituisce markup in React, una classe più una stringa di template in Angular.

Libreria vs framework

È la differenza da cui dipendono quasi tutte le altre. React copre il rendering e lo stato dei componenti. Tutto il resto è una tua scelta:

  • Routing: React Router, TanStack Router o le route basate sui file di un framework.
  • Recupero dei dati: fetch in un effetto, TanStack Query, oppure i loader e i server component di un framework.
  • Form: semplici input controllati, le form action di React 19 o React Hook Form.
  • Stato globale: context, Zustand, Redux Toolkit, Jotai.

Molti team saltano gran parte di queste scelte partendo da un framework React come Next.js o React Router in modalità framework, che include routing, caricamento dei dati e rendering lato server.

Angular fa queste scelte per te: @angular/router, form reattivi e basati su template, HttpClient, dependency injection, una configurazione per i test e la CLI ng che genera componenti e servizi. Ogni progetto Angular ha più o meno lo stesso aspetto, un motivo comune per cui le grandi organizzazioni lo scelgono. Il prezzo è una superficie più ampia da imparare e meno libertà di sostituire un pezzo.

JSX vs template

I componenti React restituiscono JSX, che è JavaScript. Le condizioni sono && o un ternario, le liste sono .map(), e tutto ciò che puoi fare in JavaScript puoi farlo nel markup. I template di Angular sono HTML con una sintassi propria: @if, @for con track, binding [property], binding (event) e interpolazione {{ }}. I template tengono markup e logica visibilmente separati; JSX li tiene in un unico punto e ti dà tutto il linguaggio. Ecco una lista filtrata, la seconda funzionalità da confrontare.

Scrivi an nella casella e guarda la console: l'intera funzione viene eseguita di nuovo a ogni tasto, e visible viene semplicemente ricalcolato. Lo stesso componente in Angular, con il template in un file a parte:

import { Component, computed, signal } from '@angular/core';

@Component({
    selector: 'app-fruit-filter',
    templateUrl: './fruit-filter.component.html',
})
export class FruitFilterComponent {
    fruits = ['Apple', 'Banana', 'Cherry', 'Grape', 'Mango', 'Peach'];
    query = signal('');

    visible = computed(() =>
        this.fruits.filter((f) => f.toLowerCase().includes(this.query().toLowerCase()))
    );
}
<input #box [value]="query()" (input)="query.set(box.value)" placeholder="Filter fruit" />
<ul>
    @for (fruit of visible(); track fruit) {
        <li>{{ fruit }}</li>
    } @empty {
        <li>No match</li>
    }
</ul>

In Angular, computed dichiara che visible dipende da query, quindi Angular sa quale template lo legge e ricalcola visible solo quando query cambia. In React non c'è alcuna dichiarazione: il componente viene rieseguito e ricalcola. La key={fruit} in React e il track fruit in Angular fanno lo stesso lavoro, dicendo al framework quale voce della lista è quale.

Prima JavaScript vs prima TypeScript

React è JavaScript semplice con JSX, e TypeScript è un'opzione che aggiungi (npm create vite@latest my-app -- --template react-ts). La maggior parte dei nuovi progetti React lo aggiunge, ma puoi imparare React senza conoscere i tipi. Angular è costruito per TypeScript: decorator, dependency injection e il controllo dei tipi dei template lo danno tutti per scontato. Se il tuo team scrive già codice tipizzato, non è un problema; se sei alle prime armi con la programmazione, è una cosa in più da imparare tutta in una volta. La pagina su React con TypeScript mostra come funzionano i tipi dal lato di React.

Flusso dei dati e change detection

Entrambi passano i dati verso il basso tramite input (props in React, input() o @Input() in Angular) e mandano gli eventi verso l'alto tramite callback (funzioni passate come props in React, output() o @Output() in Angular). La differenza è come ciascuno si accorge di un cambiamento.

React tratta lo stato come istantanee immutabili. Chiami un setter con un nuovo valore, React riesegue la funzione del componente, confronta il nuovo JSX con il vecchio e aggiorna il DOM. Nulla viene tracciato automaticamente: la funzione di rendering è il grafo delle dipendenze. È semplice da ragionare, e il prezzo è che a volte aggiungi memo, useMemo o useCallback (o lasci che li aggiunga React Compiler) per saltare del lavoro.

Angular storicamente usava Zone.js per rilevare qualsiasi evento asincrono e poi controllava l'albero dei componenti alla ricerca di binding cambiati. L'Angular moderno si sta spostando sui signal: signal, computed ed effect tracciano quali valori legge ogni template, quindi Angular controlla solo i componenti i cui signal sono cambiati, e le versioni recenti possono funzionare del tutto senza Zone.js. I template di Angular non rieseguono un'intera funzione a ogni cambiamento come fanno i componenti React.

Nel codice di tutti i giorni i due sembrano più vicini di quanto suggeriscano i meccanismi: tieni uno stato, ne derivi dei valori, e lo schermo segue.

Gestione dello stato

In React, lo stato locale è useState o useReducer, lo stato condiviso viene sollevato in un genitore o messo nel context, e lo stato a livello di app vive spesso in una piccola libreria di store. In Angular, lo stato locale sono i signal sul componente, e lo stato condiviso vive di solito in un servizio iniettato ovunque serva; la dependency injection è la risposta integrata di Angular a "come fanno due componenti lontani a condividere dati". NgRx esiste per i team che vogliono uno store in stile Redux. React non ha un sistema di dependency injection; il context ricopre un ruolo simile.

Tabella di confronto

ReactAngular
Cos'èLibreria per la UIFramework applicativo completo
LinguaggioJavaScript o TypeScriptTypeScript
MarkupJSX dentro JavaScriptTemplate HTML con sintassi Angular
Forma dei componentiFunzione che restituisce JSXClasse con un decorator e un template
Stato localeuseState, useReducerSignal (signal, computed)
Come avvengono gli aggiornamentiIl componente viene rieseguito, React confronta l'outputSignal e change detection aggiornano i binding
Stato condivisoProps, context, una libreria di storeServizi iniettati, signal, NgRx
RoutingLibreria separata o frameworkIntegrato (@angular/router)
FormA tua scelta, più le form action di React 19Integrati (form reattivi e basati su template)
HTTPfetch o una libreriaIntegrato (HttpClient)
Dependency injectionNessuna (il context è la cosa più vicina)Integrata
StrumentiVite o la CLI di un frameworkAngular CLI (ng)
Rendering lato serverNext.js, React Router in modalità frameworkAngular SSR
App mobileReact NativeIonic con Capacitor, NativeScript
Mantenuto daMeta e la comunitàGoogle

Curva di apprendimento

Con React si parte più in fretta. Un principiante che conosce JavaScript può costruire qualcosa di reale dopo aver imparato componenti, props, stato ed effetti, e la pagina su cos'è React copre l'intera idea in pochi minuti. Lo studio si sposta più avanti: devi scegliere un router, un approccio al recupero dei dati e una strategia per i form, e codebase React diverse fanno scelte diverse.

Angular ha un inizio più ripido: TypeScript, decorator, template, signal, dependency injection, i moduli per router e form, e RxJS per alcune API. Una volta che lo conosci, però, ogni progetto Angular usa gli stessi pezzi nello stesso modo, quindi passare da un progetto all'altro è più facile.

Quando scegliere quale

Scegli React quando:

  • Vuoi un nucleo piccolo e la libertà di scegliere il resto, oppure vuoi un framework come Next.js per il rendering lato server e le route basate sui file.
  • Hai in programma di costruire anche app mobile, dove React Native riutilizza lo stesso modello a componenti.
  • Il team si trova bene soprattutto con JavaScript, oppure stai imparando lo sviluppo front end e vuoi la strada più breve verso un'app funzionante.

Scegli Angular quando:

  • Un grande team ha bisogno di un'unica struttura standard su molti progetti, con meno decisioni architetturali su cui discutere.
  • Vuoi form, HTTP, routing e dependency injection mantenuti insieme da un unico team, e aggiornati insieme dalla CLI.
  • Il team scrive già TypeScript e apprezza i servizi basati su classi e una separazione chiara tra template e logica.

Entrambi sono maturi, molto usati in produzione e validi per una carriera. Le competenze si trasferiscono: componenti, flusso dei dati a senso unico, stato derivato e aggiornamenti reattivi sono le stesse idee in entrambi.

Domande frequenti

È meglio React o Angular?

In generale nessuno dei due è migliore. Angular ti dà un unico kit di strumenti completo e con regole precise, adatto a grandi team che vogliono la stessa struttura in ogni progetto. React ti dà un nucleo piccolo e libera scelta per il resto, adatto a team che vogliono flessibilità o un framework come Next.js.

React è più facile da imparare di Angular?

Di solito sì, all'inizio. Il nucleo di React sono componenti, props, stato e una manciata di hook, tutto in JavaScript. Angular ti chiede di imparare TypeScript, decorator, template, dependency injection, signal e i suoi moduli per form e HTTP prima di costruire granché. Poi però Angular richiede meno decisioni.

Angular è un framework e React una libreria?

Sì. Angular include in un unico framework routing, form, un client HTTP, dependency injection, configurazione per i test e una CLI. React renderizza solo la UI; routing, recupero dei dati e form arrivano da librerie separate o da un framework React come Next.js o React Router.

Angular usa TypeScript e React usa JavaScript?

Angular è scritto per TypeScript e i suoi strumenti lo danno per scontato. React funziona ugualmente bene con JavaScript semplice e con TypeScript; la maggior parte dei nuovi progetti React sceglie TypeScript, ma è facoltativo.

Posso passare da Angular a React?

Sì, i concetti si trasferiscono: componenti, input (props), output (props callback) e stato reattivo. Gli adattamenti principali sono JSX al posto dei template, hook al posto dei membri delle classi, e la scelta delle librerie per routing e form.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA