Frontend

Cos'è React?

Autore

Manuel Ricci

React è una libreria JavaScript per la costruzione di interfacce utente, o UI (User Interfaces). È stato sviluppato da ingegneri di Facebook ed è utilizzato per costruire applicazioni web e mobili interattive con un approccio efficiente e flessibile. La filosofia di React si concentra sulla creazione di componenti UI riutilizzabili che gestiscono il proprio stato, rendendo più facile e veloce lo sviluppo di applicazioni complesse.

Storia

React è stato creato da Jordan Walke, un ingegnere del software presso Facebook. È stato rilasciato per la prima volta nel 2013 e da allora ha guadagnato una popolarità enorme nella comunità degli sviluppatori. La necessità di React è nata dalla sfida di gestire viste complesse con dati che cambiano frequentemente in applicazioni web di grande scala, come Facebook stesso. Inizialmente utilizzato internamente, il successo e l'efficacia di React hanno portato Facebook a rilasciarlo come open source, consentendo a sviluppatori di tutto il mondo di contribuire e beneficiare della sua architettura.

Concetti Chiave

Componenti

React introduce il concetto di componenti UI, che sono pezzi di codice riutilizzabili che rappresentano parti dell'interfaccia utente. Ogni componente ha il proprio stato e logica, che può essere incapsulato e riutilizzato in varie parti dell'applicazione.

React

React utilizza JSX, una sintassi che permette di scrivere HTML all'interno di JavaScript. Questo rende più facile scrivere e capire il codice, poiché la struttura dell'UI è visivamente simile a HTML standard, ma con la potenza di JavaScript.

Virtual DOM

React implementa un Virtual DOM, una rappresentazione leggera e in memoria del DOM reale. Quando lo stato di un componente cambia, React calcola la differenza tra il Virtual DOM e il DOM reale, e aggiorna solo le parti che sono cambiate. Questo rende l'aggiornamento dell'UI molto più veloce e efficiente.

Cos'è il Virtual DOM

Il Virtual DOM è una rappresentazione in memoria del DOM (Document Object Model) reale del browser. È fondamentalmente un albero di nodi che rappresenta gli elementi e i loro attributi della pagina web, simile alla struttura del DOM reale, ma esistente completamente in memoria. Questo modello è leggero e può essere aggiornato molto rapidamente rispetto al DOM reale.

Funzionamento del Virtual DOM

Quando si costruisce un'applicazione con React, ogni volta che lo stato di un componente cambia, React genera una nuova rappresentazione del Virtual DOM. Questo processo comprende i seguenti passaggi:

  1. Aggiornamento del Virtual DOM: Alla modifica dello stato di un componente, React aggiorna il Virtual DOM per riflettere il nuovo stato.
  2. Diffing: React confronta la nuova versione del Virtual DOM con la precedente versione salvata. Questo processo è chiamato "diffing". Utilizzando algoritmi efficienti, React determina quali parti del Virtual DOM sono cambiate.
  3. Reconciliation: Basandosi sulle differenze trovate, React calcola il modo più efficiente per aggiornare il DOM reale per corrispondere al Virtual DOM aggiornato.
  4. Aggiornamento del DOM reale: React aggiorna solo le parti del DOM reale che sono cambiate. Questo passaggio è molto più veloce rispetto alla riscrittura completa del DOM e porta a significativi miglioramenti delle prestazioni.

Benefici del Virtual DOM

  • Prestazioni: Poiché le operazioni sul DOM reale sono costose in termini di prestazioni, l'uso del Virtual DOM permette a React di minimizzare le interazioni con il DOM reale, riducendo così il tempo necessario per aggiornare l'interfaccia utente.
  • Efficienza nell'aggiornamento: Il processo di diffing e reconciliation garantisce che solo le parti necessarie dell'interfaccia utente siano aggiornate, evitando aggiornamenti inutili e migliorando l'efficienza complessiva dell'applicazione.
  • Semplicità di programmazione: Gli sviluppatori possono lavorare con il Virtual DOM in modo più prevedibile e dichiarativo, senza preoccuparsi delle ottimizzazioni manuali delle modifiche al DOM reale. React si occupa di ottimizzare gli aggiornamenti, permettendo agli sviluppatori di concentrarsi sulla logica dell'applicazione.

Il Virtual DOM non è un concetto unico a React; altre librerie e framework moderni hanno adottato idee simili per migliorare le prestazioni delle interfacce utente. Tuttavia, l'implementazione di React del Virtual DOM e il suo algoritmo di diffing e reconciliation sono stati pionieristici e rimangono aspetti chiave della sua popolarità e del suo successo. Il Virtual DOM permette di costruire applicazioni web complesse e ad alte prestazioni con un approccio più semplice e mantenibile allo sviluppo di interfacce utente.

Data flow unidirezionale

React segue un modello di data flow unidirezionale, o "one-way data binding", che rende più semplice tracciare e comprendere come i dati si muovono attraverso l'applicazione. Questo aiuta a prevenire errori e rende il codice più facile da debuggare.

Filosofia

La filosofia di React si basa su alcune idee chiave:

  • Dichiaratività: React rende la creazione di interfacce utente interattive più semplice e prevedibile con un design dichiarativo. Questo significa che si descrive come dovrebbe apparire l'UI in vari stati, e React si occupa di aggiornare l'UI quando i dati cambiano.
  • Composizione: La capacità di comporre componenti insieme come blocchi di costruzione per creare UI complesse permette di mantenere il codice organizzato e riutilizzabile.
  • Apprendimento Mirato: React si concentra sulla costruzione di UI, lasciando ad altre librerie la gestione di aspetti come il routing e la gestione dello stato globale. Questo approccio permette agli sviluppatori di apprendere e integrare solo ciò che è necessario per il loro progetto.

Sviluppi Recenti e Futuro

Dalla sua introduzione, React ha visto molti sviluppi significativi, inclusa l'introduzione di React Hooks nel 2018, che ha permesso agli sviluppatori di utilizzare lo stato e altre funzionalità di React senza scrivere classi. Il team di React continua a lavorare su miglioramenti in termini di performance, accessibilità e sviluppo di nuove funzionalità.

React ha avuto un impatto profondo sullo sviluppo web e mobile, influenzando non solo come le applicazioni vengono costruite, ma anche come gli sviluppatori pensano all'architettura delle applicazioni UI. Con una comunità di sviluppatori attiva e un ecosistema in continua espansione, React è destinato a rimanere una scelta popolare per lo sviluppo di applicazioni interattive

L’ecosistema

L'ecosistema di React comprende una vasta gamma di strumenti, librerie e pattern che si estendono ben oltre la libreria React stessa, fornendo agli sviluppatori risorse potenti per costruire, testare e distribuire applicazioni web e mobili. Questo ecosistema è cresciuto enormemente negli anni, evolvendosi in una comunità ricca e diversificata di strumenti che supportano vari aspetti dello sviluppo di applicazioni. Ecco una panoramica di alcune delle parti più importanti dell'ecosistema React.

Gestione dello Stato

  • Redux: Una delle librerie più popolari per la gestione dello stato globale in applicazioni React. Si basa su principi di programmazione funzionale e offre un modello prevedibile di flusso dei dati, facilitando la gestione di stati complessi e la logica di business.
  • Context API: Integrata direttamente in React, la Context API permette di passare dati attraverso l'albero dei componenti senza dover utilizzare props a ogni livello, semplificando la condivisione dello stato tra componenti.
  • MobX: Un'altra libreria per la gestione dello stato che utilizza principi di programmazione reattiva per rendere lo stato dell'applicazione osservabile e gestire automaticamente le dipendenze tra stato e UI.

Routing

  • React Router: La libreria standard per il routing in applicazioni React. Offre una serie di componenti navigabili che consentono di definire percorsi nella tua applicazione, gestendo la navigazione e la visualizzazione condizionale di componenti UI.
  • Next.js: Un framework basato su React che include il routing basato sul filesystem, oltre a offrire funzionalità per il rendering lato server (SSR), la generazione di siti statici (SSG) e l'ottimizzazione delle prestazioni.

Creazione e Gestione di Form

  • Formik: Una libreria che semplifica la creazione e la gestione dei form in React, gestendo lo stato del form, la validazione e la gestione degli errori.
  • React Hook Form: Sfrutta i React Hooks per facilitare la gestione dei form, migliorando le prestazioni e riducendo la quantità di codice necessaria.

Stili e Componenti

  • Styled Components: Permette di scrivere codice CSS all'interno dei componenti React, utilizzando i tagged template literals per stilizzare i componenti in modo dinamico.
  • Material-UI: Una libreria di componenti UI che implementa il Material Design di Google, offrendo una vasta gamma di componenti stilizzati e pronti all'uso per accelerare lo sviluppo dell'interfaccia utente.
  • Tailwind CSS con Twin.macro: La combinazione di Tailwind CSS per utility-first CSS e Twin.macro per l'integrazione con styled-components o emotion in React, facilitando la scrittura di stili efficienti e mantenibili.

Testing

  • Jest: Un framework di testing JavaScript che funziona bene con React per il testing unitario e di snapshot, offrendo un modo semplice per testare i componenti.
  • Enzyme: Una libreria di testing per React sviluppata da Airbnb che rende più semplice l'assert dei componenti React e la manipolazione dell'output dei test.
  • React Testing Library: Parte della famiglia di Testing Library, è progettata per testare il comportamento dei componenti React in modo che rispecchi l'uso reale più da vicino.

Strumenti di Sviluppo e Linting

  • Create React App: Uno strumento che consente di creare nuove applicazioni React con una singola riga di comando, configurando l'ambiente di sviluppo con webpack, Babel e ESLint.
  • ESLint con il plugin React: Permette di mantenere il codice pulito e conforme alle best practices attraverso l'analisi statica del codice.

Server-Side Rendering (SSR) e Static Site Generation (SSG)

  • Next.js e Gatsby: Entrambi supportano SSR e SSG, offrendo modi efficienti per migliorare le prestazioni e l'ottimizzazione dei motori di ricerca (SEO) delle applicazioni React.

L’ambiente di sviluppo

Impostare un ambiente di sviluppo per React è un passo fondamentale per iniziare a costruire applicazioni con questa libreria. Grazie a strumenti moderni e a una comunità di sviluppatori attiva, configurare l'ambiente di sviluppo React è diventato un processo relativamente semplice e diretto. Ecco una guida passo passo per impostare il tuo ambiente di sviluppo React.

Prerequisiti

Prima di iniziare, assicurati di avere installato Node.js e npm (Node Package Manager) sul tuo computer. React richiede Node.js per eseguire lo strumento di costruzione e npm per gestire le librerie e le dipendenze del progetto.

  • Node.js: Puoi scaricarlo e installarlo da https://nodejs.org. L'installazione di Node.js includerà automaticamente npm.
  • Editor di Codice: Sebbene non sia strettamente necessario, avere un buon editor di codice come Visual Studio Code, Sublime Text o Atom può rendere lo sviluppo più efficiente grazie a funzionalità come il completamento automatico del codice, il controllo della sintassi e l'integrazione con Git.

Creazione di un nuovo progetto React

Il modo più semplice per iniziare un nuovo progetto React è utilizzare Create React App (CRA), uno strumento ufficiale di React che configura l'ambiente di sviluppo con le migliori pratiche e gli strumenti più comuni.

  1. Installazione di Create React App: Apri il terminale e digita il seguente comando per installare Create React App globalmente sul tuo computer: bash npm install -g create-react-app
  2. Creazione di un Nuovo Progetto: Per creare un nuovo progetto, usa il comando create-react-app seguito dal nome del tuo progetto. Per esempio: bash npx create-react-app my-react-app Questo comando crea una nuova cartella chiamata my-react-app con tutta la struttura del progetto e le dipendenze necessarie. L'uso di npx esegue create-react-app senza doverlo installare globalmente.

  3. Avvio dell'Applicazione: Una volta completata la creazione del progetto, naviga nella cartella del progetto e avvia l'applicazione: bash cd my-react-app npm start Questo comando avvierà un server di sviluppo locale e aprirà automaticamente il tuo browser predefinito all'indirizzo http://localhost:3000, dove potrai vedere la tua nuova applicazione React in esecuzione.

Struttura del Progetto

Dopo aver creato il progetto con Create React App, la tua cartella del progetto avrà la seguente struttura di base:

  • node_modules/: Contiene tutte le librerie e le dipendenze del progetto.
  • public/: Contiene i file statici come l'HTML di base e le icone.
  • src/: Contiene i file sorgente JavaScript e CSS per la tua applicazione React. Questo è dove passerai la maggior parte del tuo tempo scrivendo codice.
  • package.json: Un file che elenca le dipendenze del progetto e varie configurazioni.
  • README.md: Un file markdown con istruzioni di base su come utilizzare il progetto.

Creare il primo componente

Creare il tuo primo componente React è un passo entusiasmante verso la costruzione di applicazioni web moderne e interattive. In React, ogni parte dell'interfaccia utente (UI) è costruita utilizzando componenti, che sono essenzialmente pezzi riutilizzabili di codice che restituiscono elementi React da renderizzare all'utente. Questi elementi possono essere semplici come un singolo bottone o complessi come un intero modulo di iscrizione. Vediamo come creare un semplice componente React.

Creazione di un Componente Funzionale

I componenti in React possono essere definiti come classi o funzioni. Con l'introduzione degli Hooks in React 16.8, i componenti funzionali sono diventati la scelta preferita per molti sviluppatori grazie alla loro semplicità e capacità di utilizzare le caratteristiche dello stato e del ciclo di vita in un componente funzionale. Ecco come si crea un componente funzionale:

1import React from 'react';
2
3function Welcome(props) {
4  return <h1>Hello, {props.name}!</h1>;
5}

Questo è un componente funzionale di base che accetta props (proprietà) e restituisce un elemento React, in questo caso un semplice elemento <h1> che mostra un messaggio di benvenuto. Le props sono un modo per passare dati da un componente padre a un componente figlio in React.

Uso del Componente

Per utilizzare il componente Welcome all'interno di un'altra parte dell'applicazione, lo si può inserire come se fosse un tag HTML:

1import React from 'react';
2import ReactDOM from 'react-dom';
3import Welcome from './Welcome'; // Assicurati che il percorso sia corretto
4
5function App() {
6  return (
7    <div>
8      <Welcome name="Sara" />
9      <Welcome name="Cahal" />
10      <Welcome name="Edite" />
11    </div>
12  );
13}
14
15ReactDOM.render(<App />, document.getElementById('root'));

Questo codice renderizza tre messaggi di benvenuto diversi passando tre diverse props name al componente Welcome. ReactDOM.render() è il metodo che dice a React dove inserire il rendering del componente nell'interfaccia utente, in questo caso nel nodo DOM con id='root'.

Componenti con Stato (Stateful Components)

Mentre il componente sopra è semplice e non mantiene uno stato interno, potresti voler creare componenti che reagiscono agli input dell'utente o a altre azioni. Gli Hooks, come useState, permettono ai componenti funzionali di avere uno stato interno:

1import React, { useState } from 'react';
2
3function Counter() {
4  const [count, setCount] = useState(0);
5
6  return (
7    <div>
8      <p>You clicked {count} times</p>
9      <button onClick={() => setCount(count + 1)}>
10        Click me
11      </button>
12    </div>
13  );
14}

Questo componente Counter utilizza l'Hook useState per tenere traccia del conteggio dei clic su un bottone. Ogni volta che il bottone viene cliccato, setCount viene chiamato per aggiornare lo stato del componente, causando il re-rendering del componente con il nuovo conteggio.

Caricamento...

Diventiamo amici di penna? ✒️

Iscriviti alla newsletter per ricevere una mail ogni paio di settimane con le ultime novità, gli ultimi approfondimenti e gli ultimi corsi gratuiti puubblicati. Ogni tanto potrei scrivere qualcosa di commerciale, ma solo se mi autorizzi, altrimenti non ti disturberò oltre.

Se non ti piace la newsletter ti ricordo la community su Discord, dove puoi chiedere aiuto, fare domande e condividere le tue esperienze (ma soprattutto scambiare due meme con me). Ti aspetto!

Ho in previsione di mandarti una newsletter ogni due settimane e una commerciale quando capita.