HTML CSS JAVASCRIPT SQL MYSQL PYTHON JAVA PHP C C++ C# PACKET TRACER CYBERSECURITY REACTTYPESCRIPTNODE.JSGIT & GITHUBDATA SCIENCEBOOTSTRAPGOKOTLINJQUERYDJANGOVUEANGULAR MONGODB POSTGRESQL SASS NUMPY PANDAS SCIPY DSA RUST SWIFT BASHXMLW3.CSSANGULARJSAIAWSPROGRAMMAZIONEEXCEL WORD POWERPOINT
Corso gratuito

Corso React in italiano

Il tutorial completo per imparare React da zero: JSX, componenti, props, state, hook, router, form, CSS-in-JS e molto altro.

Introduzione a React

React è una libreria JavaScript open-source sviluppata da Facebook (Meta) per costruire interfacce utente interattive. È la tecnologia frontend più usata al mondo ed è alla base di app come Facebook, Instagram, WhatsApp Web e migliaia di applicazioni aziendali.

React introduce un approccio basato su componenti riutilizzabili: ogni pezzo dell'interfaccia (pulsante, menu, modulo) Γ¨ un componente indipendente con la propria logica. Questo rende il codice piΓΉ organizzato, testabile e scalabile.

PerchΓ© imparare React?

  • πŸ† La libreria frontend piΓΉ richiesta nelle offerte di lavoro
  • ⚑ Virtual DOM per aggiornamenti ultra-veloci dell'interfaccia
  • 🧩 Architettura a componenti riutilizzabili
  • 🌍 Ecosistema enorme: React Router, Redux, Next.js, React Native
  • πŸ“± Con React Native puoi creare app mobile iOS e Android
βš›οΈ React non Γ¨ un framework completo: gestisce solo la view (la UI). Per routing, state globale e altro si usano librerie aggiuntive dell'ecosistema React.
Esempio

Guida introduttiva

Il modo piΓΉ rapido per iniziare con React oggi Γ¨ usare Vite, uno strumento di build moderno che crea in pochi secondi un progetto React pronto all'uso.

Creare un progetto React con Vite

Terminale

Dopo aver eseguito questi comandi, apri il browser su http://localhost:5173 per vedere la tua app React in esecuzione.

Struttura base del progetto

File/cartellaDescrizione
src/App.jsxComponente principale dell'app
src/main.jsxPunto di ingresso β€” monta React nel DOM
index.htmlHTML di base con div#root
vite.config.jsConfigurazione di Vite
package.jsonDipendenze e script
πŸ’‘ In alternativa a Vite puoi usare Create React App (piΓΉ lento ma storico) oppure Next.js per app con SSR (server-side rendering).

Prima applicazione React

Il file main.jsx Γ¨ il punto di ingresso: monta il componente radice nell'elemento HTML con id="root".

main.jsx
App.jsx
βš›οΈ React usa className al posto di class perchΓ© class Γ¨ una parola riservata in JavaScript.

Render HTML

React renderizza i componenti nel DOM reale attraverso il Virtual DOM: una rappresentazione in memoria dell'interfaccia. Quando lo stato cambia, React calcola solo le differenze (diff) e aggiorna solo ciΓ² che Γ¨ necessario, rendendo le app molto performanti.

Esempio β€” ReactDOM.createRoot

Virtual DOM vs DOM reale

Virtual DOMDOM Reale
Oggetto JavaScript in memoriaStruttura HTML nel browser
Aggiornamenti istantaneiAggiornamenti costosi
React calcola le differenzeSolo le differenze vengono applicate

Upgrade β€” React 18

React 18 (2022) ha introdotto importanti novitΓ  rispetto alle versioni precedenti. La piΓΉ visibile Γ¨ la nuova API createRoot che sostituisce il vecchio ReactDOM.render.

React 17 (vecchio) vs React 18 (nuovo)

NovitΓ  di React 18

  • Concurrent Mode: React puΓ² interrompere e riprendere il rendering per mantenere l'app reattiva
  • Automatic Batching: gli aggiornamenti di stato multipli vengono raggruppati automaticamente
  • useTransition e useDeferredValue: hook per gestire transizioni UI non urgenti
  • Suspense migliorato: supporto per il data fetching asincrono

ES6 in React

React fa ampio uso delle funzionalitΓ  moderne di JavaScript (ES6+). Conoscerle Γ¨ fondamentale per scrivere codice React idiomatico.

Arrow functions, destructuring, spread
πŸ’‘ Lo spread operator Γ¨ molto usato in React per aggiornare lo state in modo immutabile senza modificare l'oggetto originale.

JSX β€” Introduzione

JSX (JavaScript XML) Γ¨ un'estensione della sintassi JavaScript che permette di scrivere markup simile all'HTML direttamente nel codice JS. Babel lo compila in chiamate React.createElement().

JSX vs createElement

Regole fondamentali JSX

  • Ogni componente deve restituire un solo elemento radice (usa un <div> o un Fragment <>...</>)
  • I tag vanno sempre chiusi: <br />, <img />
  • Usa className invece di class
  • Usa htmlFor invece di for

JSX β€” Espressioni

In JSX puoi inserire qualsiasi espressione JavaScript tra parentesi graffe {}. Puoi usare variabili, operazioni matematiche, chiamate a funzioni e operatori ternari.

Espressioni JSX
πŸ“Œ Le parentesi graffe accettano solo espressioni, non istruzioni (if, for, ecc.). Per la logica usa operatori ternari o funzioni esterne.

JSX β€” Attributi

Gli attributi JSX seguono la convenzione camelCase. Molti attributi HTML hanno nomi diversi in JSX per evitare conflitti con parole riservate JavaScript.

Attributi JSX
HTMLJSX
classclassName
forhtmlFor
tabindextabIndex
onclickonClick
style="color:red"style={{ color: 'red' }}

JSX β€” If Statements

In JSX non puoi usare direttamente if dentro le parentesi graffe, ma hai tre alternative comuni:

Condizioni in JSX

Componenti

I componenti sono i mattoncini di React. Ogni componente Γ¨ una funzione (o classe) che riceve dati in input (props) e restituisce JSX. I componenti si compongono tra loro per costruire interfacce complesse.

Componenti funzionali
πŸ’‘ I nomi dei componenti devono iniziare con la lettera maiuscola: React usa questa convenzione per distinguere i componenti custom dai tag HTML nativi.

Class Components

Prima degli hook (React 16.8), i componenti con stato dovevano essere scritti come classi. Oggi si preferiscono i componenti funzionali con hook, ma Γ¨ importante conoscere le classi per lavorare su codice legacy.

Class Component

Ciclo di vita dei Class Components

MetodoQuando viene chiamato
componentDidMountDopo il primo render (mounting)
componentDidUpdateDopo ogni aggiornamento dello state/props
componentWillUnmountPrima che il componente venga rimosso
renderAd ogni render (obbligatorio)

Props

Le props (proprietΓ ) sono il meccanismo con cui un componente genitore passa dati a un componente figlio. Le props sono immutabili: il figlio puΓ² leggerle ma non modificarle.

Passare e ricevere props
πŸ“Œ Le props fluiscono sempre dall'alto verso il basso (dal genitore al figlio). Per passare dati in senso contrario si usano le callback.

Props β€” Destructuring

Il destructuring ES6 rende il codice piΓΉ pulito: invece di scrivere props.nome, puoi estrarre le proprietΓ  direttamente nei parametri della funzione.

Destructuring delle props
πŸ’‘ Puoi definire valori di default direttamente nel destructuring: { colore = "blu" }.

Props β€” Children

La prop speciale children contiene tutto ciΓ² che viene scritto tra i tag di apertura e chiusura del componente. Permette di creare componenti "contenitore" generici.

Props children

Eventi

In React gli eventi si gestiscono con attributi camelCase e si passa una funzione handler (non una stringa). React utilizza un sistema di eventi sintetici che normalizza il comportamento cross-browser.

Gestire eventi
EventoDescrizione
onClickClic del mouse
onChangeCambiamento valore input
onSubmitInvio form
onFocus / onBlurFocus / perdita focus
onKeyDown / onKeyUpPressione tasto
onMouseEnter / onMouseLeaveMouse sopra/fuori

Rendering condizionale

React permette di mostrare o nascondere elementi in base a condizioni. Le tecniche principali sono l'operatore ternario, l'operatore && e le variabili JSX.

Rendering condizionale

Liste

Per renderizzare liste di elementi si usa il metodo .map(). Ogni elemento della lista deve avere una prop key unica per aiutare React a identificare gli elementi nel Virtual DOM.

Renderizzare una lista
⚠️ Non usare l'indice dell'array come key se l'ordine degli elementi può cambiare: usa sempre un ID univoco e stabile.

Form

In React i form si gestiscono con i componenti controllati: il valore dell'input è legato allo state, e ogni modifica aggiorna lo state tramite onChange. React diventa così la "fonte di verità" per i dati del form.

Input controllato

Form β€” Submit

Per gestire l'invio del form si usa l'evento onSubmit. È importante chiamare e.preventDefault() per impedire il ricaricamento della pagina.

Form con submit

Form β€” Textarea

In React, <textarea> funziona come un input normale: il valore Γ¨ gestito tramite la prop value e onChange.

Textarea controllata

Form β€” Select

Un <select> controllato usa la prop value sul tag select (non selected sull'option).

Select controllata

Form β€” Input multipli

Con piΓΉ input puoi gestire lo stato con un unico oggetto. Usa l'attributo name per identificare ogni campo e aggiornare la proprietΓ  corrispondente nello state.

Form con input multipli

Form β€” Checkbox

Per le checkbox si usa la prop checked (booleano) invece di value.

Checkbox controllata

Form β€” Radio

I radio button si gestiscono confrontando il valore dello state con il value di ogni radio.

Radio button controllato

Portals

I React Portals permettono di renderizzare un componente figlio in un nodo DOM diverso dal genitore. Sono utili per modali, tooltip e dropdown che devono "uscire" dal flusso DOM normale.

ReactDOM.createPortal
πŸ“Œ In index.html aggiungi <div id="modal-root"></div> accanto a <div id="root">.

Suspense

React.Suspense permette di mostrare un contenuto di fallback (es. uno spinner) mentre un componente figlio viene caricato in modo asincrono. È usato con React.lazy() per il code splitting.

React.lazy e Suspense
πŸ’‘ Suspense migliora le performance dell'app: i bundle vengono scaricati solo quando l'utente naviga verso quella sezione (code splitting).

CSS Styling in React

React offre diversi approcci per aggiungere stili ai componenti. Ogni approccio ha i suoi punti di forza.

Stili inline con oggetto
ApproccioProContro
CSS esternoFamiliare, sempliceNomi globali, conflitti
Stili inlineDinamici, nessun file extraNo pseudo-classi, no media query
CSS ModulesScoping locale, no conflittiSetup richiesto
CSS-in-JSCompletamente dinamicoDipendenza extra, overhead
SassVariabili, nesting, potenteCompilazione richiesta

CSS Modules

I CSS Modules sono file CSS normali con l'estensione .module.css. Vite e Create React App li supportano nativamente. I nomi delle classi vengono trasformati in identificatori univoci, eliminando i conflitti.

Bottone.module.css + Bottone.jsx
πŸ“Œ Vite trasforma styles.bottone in un nome univoco come Bottone_bottone__3xKj1, garantendo l'isolamento degli stili.

CSS-in-JS

Le librerie CSS-in-JS come styled-components e Emotion permettono di scrivere CSS direttamente nel file JavaScript, con pieno supporto a props dinamiche, temi e pseudo-classi.

styled-components

React Router

React Router Γ¨ la libreria standard per il routing nelle app React. Permette di navigare tra "pagine" senza ricaricare il browser (Single Page Application).

React Router v6 β€” Setup base
πŸ’‘ Usa useNavigate() per navigare via codice e useParams() per leggere i parametri dinamici dell'URL (/prodotti/:id).

Transitions β€” useTransition

L'hook useTransition (React 18) permette di marcare alcuni aggiornamenti di stato come "non urgenti". React dΓ  prioritΓ  agli aggiornamenti urgenti (input utente) e posticipa quelli secondari, mantenendo l'interfaccia reattiva.

useTransition

Forward Ref

React.forwardRef permette a un componente figlio di esporre un riferimento DOM al genitore. Utile per componenti di input personalizzati che devono essere controllati dall'esterno.

forwardRef

Higher-Order Components (HOC)

Un HOC è una funzione che riceve un componente e ne restituisce uno nuovo con funzionalità aggiuntive. È un pattern per il riuso della logica tra componenti (oggi spesso sostituito dagli hook).

HOC β€” withAuth

Sass in React

Sass Γ¨ un pre-processore CSS che aggiunge variabili, nesting, mixin e funzioni al CSS. In Vite basta installare il pacchetto sass e usare l'estensione .scss.

Sass con React

Hook β€” useState

useState Γ¨ l'hook piΓΉ fondamentale: permette di aggiungere stato locale a un componente funzionale. Restituisce il valore corrente e una funzione per aggiornarlo.

useState β€” Contatore
πŸ’‘ Quando il nuovo stato dipende da quello precedente, usa la forma funzionale: setCount(c => c + 1). Evita race condition in aggiornamenti multipli.

Hook β€” useEffect

useEffect gestisce gli effetti collaterali: fetch di dati, sottoscrizioni a eventi, aggiornamento del DOM. Sostituisce componentDidMount, componentDidUpdate e componentWillUnmount.

useEffect β€” fetch dati
Array dipendenzeComportamento
OmessoEseguito dopo ogni render
[] vuotoSolo al mount (una volta)
[val]Quando val cambia

Hook β€” useContext

useContext consente di condividere dati tra componenti senza passare props a ogni livello (prop drilling). Il Context Γ¨ ideale per temi, lingua, utente autenticato.

useContext β€” Tema

Hook β€” useRef

useRef restituisce un oggetto mutabile con una proprietà .current. È usato per accedere direttamente agli elementi DOM e per conservare valori che non devono causare un re-render quando cambiano.

useRef β€” DOM e timer

Hook β€” useReducer

useReducer Γ¨ un'alternativa a useState per stato complesso. Si ispira al pattern Redux: un reducer riceve lo stato corrente e un'azione, e restituisce il nuovo stato.

useReducer β€” Contatore avanzato
πŸ’‘ Preferisci useReducer quando hai molte variabili di stato correlate o logica di transizione complessa.

Hook β€” useCallback

useCallback restituisce una versione memoizzata di una funzione callback. È utile per ottimizzare le performance quando si passa una callback a componenti figli profondi: evita che il figlio si re-renderizzi inutilmente ad ogni render del genitore.

useCallback

Hook β€” useMemo

useMemo memoizza il risultato di un calcolo costoso: lo ricalcola solo quando le dipendenze cambiano. È utile per filtrare/ordinare grandi liste o calcoli pesanti.

useMemo β€” Filtro lista

Custom Hooks

I Custom Hook sono funzioni JavaScript che iniziano con use e possono chiamare altri hook. Permettono di estrarre e riutilizzare logica stateful tra piΓΉ componenti.

Custom Hook β€” useFetch
πŸ’‘ I Custom Hook sono il modo moderno per condividere logica in React. Seguono sempre la convenzione use all'inizio del nome.

Editor online β€” Prova React

React richiede un ambiente di build (Vite, Next.js) per essere eseguito. Puoi sperimentare immediatamente online con questi strumenti gratuiti:

  • πŸš€ StackBlitz β€” Ambiente Vite+React completo nel browser
  • πŸ“¦ CodeSandbox β€” IDE online con template React
  • ⚑ PlayCode β€” Editor React veloce e leggero
βš›οΈ Gli esempi in questo corso mostrano codice JSX con sintassi colorata. L'editor integrato ti permette di leggerli e modificarli β€” usa uno dei link sopra per eseguirli.

Quiz React

Metti alla prova le tue conoscenze con queste domande:

  1. ❓ Cosa restituisce useState(0)?
    R: Un array con il valore corrente (0) e la funzione di aggiornamento: [0, setStato].
  2. ❓ Qual Γ¨ la differenza tra useCallback e useMemo?
    R: useCallback memoizza una funzione; useMemo memoizza il risultato di un calcolo.
  3. ❓ Cosa succede se non si fornisce una key in una lista React?
    R: React non riesce a tracciare efficientemente gli elementi β†’ warning in console e possibili bug di rendering.
  4. ❓ Quando viene eseguito il cleanup di useEffect?
    R: Prima che il componente venga smontato e prima che l'effetto venga rieseguito (se le dipendenze cambiano).
  5. ❓ Cos'Γ¨ il "prop drilling"?
    R: Passare props attraverso molti livelli di componenti annidati. Si risolve con Context o Redux.
  6. ❓ Quali hook sono disponibili solo in componenti funzionali?
    R: Tutti gli hook React (useState, useEffect, ecc.) β€” non si possono usare nelle classi.

Esercizi pratici React

Esercizio 1 β€” Lista della spesa

Crea un'app dove l'utente puΓ² aggiungere elementi a una lista e rimuoverli con un clic.

Soluzione

Esercizio 2 β€” Cronometro con useRef

Crea un cronometro con i pulsanti Avvia, Pausa e Reset. Usa useRef per conservare l'ID dell'intervallo senza causare re-render.

Esercizio 3 β€” Fetch con useFetch

Crea un Custom Hook useFetch e usalo per visualizzare una lista di post da https://jsonplaceholder.typicode.com/posts.

Esercizio 4 β€” Tema scuro/chiaro

Implementa un toggle tema scuro/chiaro usando useContext. Il tema deve essere accessibile in tutta l'app senza prop drilling.

Programma del corso React

ModuloArgomenti
1 β€” Basi ReactIntro, Vite setup, JSX, componenti, props, rendering condizionale, liste
2 β€” State e FormuseState, eventi, form controllati, input multipli, checkbox, radio, select
3 β€” Hook fondamentaliuseEffect, useContext, useRef, useReducer
4 β€” OttimizzazioneuseCallback, useMemo, React.memo, code splitting, Suspense
5 β€” RoutingReact Router v6, BrowserRouter, Routes, Link, useNavigate, useParams
6 β€” StileCSS Modules, CSS-in-JS, styled-components, Sass, temi dinamici
7 β€” Pattern avanzatiCustom Hook, HOC, forwardRef, Portals, Transitions
8 β€” Progetto finaleApp completa con routing, stato globale (Context), fetch, form e stile

Piano di studio React (8 settimane)

SettimanaObiettivo
1Fondamenti: JSX, componenti, props, rendering condizionale, liste
2useState, eventi, form controllati (input, textarea, select, checkbox, radio)
3useEffect (fetch dati, cleanup), useContext (temi, autenticazione)
4useRef, useReducer, pattern avanzati dello stato
5React Router v6: routing SPA completo con parametri dinamici
6useCallback, useMemo, React.memo β€” ottimizzazione delle performance
7Custom Hook, CSS Modules, Sass, styled-components
8Progetto completo: app con routing, context, fetch API, form, stile
πŸ’‘ Dopo le basi React, studia Next.js per SSR/SSG oppure React Native per le app mobile β€” entrambi basati sugli stessi principi che hai imparato qui.

Domande da colloquio React

  • πŸ’¬ Differenza tra stato locale e stato globale? β€” Lo stato locale (useState) Γ¨ isolato nel componente. Lo stato globale (Context, Redux, Zustand) Γ¨ condiviso tra piΓΉ componenti.
  • πŸ’¬ Cos'Γ¨ il Virtual DOM e perchΓ© Γ¨ importante? β€” Una rappresentazione in memoria del DOM reale. React calcola le differenze (reconciliation) e aggiorna solo le parti cambiate, rendendo le app molto veloci.
  • πŸ’¬ Quando usare useEffect? β€” Per effetti collaterali: fetch dati, sottoscrizioni, interazioni con API esterne, aggiornamenti del titolo della pagina.
  • πŸ’¬ Cosa sono le Controlled Components? β€” Componenti form il cui valore Γ¨ gestito dallo stato React, non dal DOM. React Γ¨ la fonte di veritΓ  per il valore.
  • πŸ’¬ PerchΓ© le key nelle liste devono essere univoche? β€” React le usa per riconoscere quali elementi sono cambiati, aggiunti o rimossi, ottimizzando il re-rendering.
  • πŸ’¬ Differenza tra useCallback e useMemo? β€” useCallback memoizza una funzione; useMemo memoizza il risultato di un calcolo. Entrambi evitano rielaborazioni inutili.
  • πŸ’¬ Cos'Γ¨ il Context e quando usarlo? β€” Permette di passare dati in profonditΓ  senza prop drilling. Adatto per temi, lingua, autenticazione. Non Γ¨ sostituto di Redux per stato complesso e frequentemente aggiornato.

Bootcamp React β€” Progetto finale

Costruisci un'app completa che integra tutti i concetti del corso:

πŸš€ Progetto: App Gestione Note

  • πŸ“ CRUD completo: Crea, leggi, modifica ed elimina note
  • πŸ” Ricerca e filtro: Filtra le note con useMemo per performance
  • πŸŒ™ Tema scuro/chiaro: Toggle con useContext
  • πŸ’Ύ Persistenza: Salva le note in localStorage con useEffect
  • πŸ”€ Routing: Pagina lista, pagina dettaglio nota, pagina nuova nota
  • 🎨 Stile: CSS Modules con supporto al tema scuro
  • πŸͺ Custom Hooks: useLocalStorage, useSearch
🎯 Sfida avanzata

Aggiungi autenticazione simulata con Context (login/logout), condividi lo stato utente in tutta l'app e proteggi le route private redirigendo al login se non autenticato.

Risorse consigliate per continuare

  • πŸ“š Next.js: React con SSR, routing file-based, API routes
  • πŸ“¦ Redux Toolkit: Gestione stato globale per app complesse
  • 🎯 React Query / TanStack Query: Gestione asincrona dei dati con cache
  • πŸ“± React Native: Stesse basi React per app iOS e Android
  • πŸ§ͺ React Testing Library: Testing dei componenti React

Certificazione React

Padroneggiare React Γ¨ uno dei requisiti piΓΉ richiesti nelle offerte di lavoro frontend. Ecco come valorizzare le tue competenze:

Certificazione / PercorsoEnte / PiattaformaNote
React CertificateW3SchoolsBase, ottimo per iniziare il CV
Meta Front-End DeveloperCoursera (Meta)Include React β€” riconosciuto da Meta
React - The Complete GuideUdemy (Maximilian)Corso piΓΉ popolare, certificato di completamento
Frontend Developer Career PathScrimbaInterattivo, include React
Progetto su GitHubPortfolio personaleLa migliore prova pratica per i recruiter

Come prepararsi al colloquio

  • πŸ—οΈ Costruisci 2-3 progetti completi visibili su GitHub
  • ⚑ Conosci bene gli hook: useState, useEffect, useContext, useRef
  • πŸš€ Impara Next.js: molte aziende lo usano con React
  • πŸ§ͺ Impara le basi del testing con React Testing Library
  • πŸ“– Studia i concetti: Virtual DOM, reconciliation, re-render, memoization

Conclusione β€” E ora?

Hai completato il corso React! Hai imparato JSX, i componenti funzionali, le props, tutti i principali hook (useState, useEffect, useContext, useRef, useReducer, useCallback, useMemo), i Custom Hook, React Router, la gestione dei form, CSS Modules, CSS-in-JS, Sass, Portals, Suspense e i pattern avanzati come HOC e forwardRef.

I tuoi prossimi passi

  • πŸ—οΈ Costruisci un progetto reale: un'app todo, un portfolio, un e-commerce semplice
  • ⚑ Studia Next.js: aggiunge routing, SSR e API routes a React
  • πŸ“¦ Esplora Redux Toolkit per gestire stato globale complesso
  • πŸ“± Prova React Native se ti interessano le app mobile
  • πŸ§ͺ Impara il testing con Jest e React Testing Library
  • 🎨 Approfondisci l'accessibilitΓ : aria-label, ruoli semantici, focus management
🎯 La tua sfida finale

Crea un'app React completa con almeno: un'interfaccia con piΓΉ "pagine" gestite da React Router, stato condiviso tramite Context, fetch di dati da una API pubblica, un form con validazione, e CSS Modules per lo stile. Pubblicala su Vercel o Netlify e inseriscila nel tuo portfolio!

✏️ Provalo tu β€” leggi e modifica il codice React (JSX)
Anteprima