SlideShare a Scribd company logo
1 of 26
Download to read offline
How To React
Come gestire lo stato in un’applicazione React.js
Aldo Noschese x Riccardo Tartaglia
#howToReact
Aldo Noschese
Front-end Dev @ weBeetle
Riccardo Tartaglia
Full-Stack Dev @ weBeetle
@noschese_aldo
aldo-noschese-5b9101193
@riktarweb
riccardo-tartaglia
#howToReact
una breve introduzione
Cos’è React?
React.js è una delle librerie JavaScript più popolari per costruire interfacce utente,viene utilizzata
sia per creare Web App, che Mobile App (React Native).
L’interfaccia utente è costituita da piccole unità (componenti), come testi, pulsanti o immagini, che
React ci consente appunto, di combinare e riutilizzare.
#howToReact
❏ Facile da imparare e da usare
❏ Community vasta
❏ Libertà nelle scelte
architetturali
❏ Virtual DOM
#howToReact
CONTRO
PRO
❏ Scarsa documentazione
❏ Tecnologia “dinamica”
❏ Libertà nelle scelte
architetturali
DOM: Document Object Model
Ogni volta che viene caricato un documento web, come ad esempio dell’HTML, il browser crea una
rappresentazione ad oggetti di quel documento, una struttura ad albero.
Questa rappresentazione viene chiamata DOM.
Grazie alla sua natura basata sugli oggetti, JavaScript può interagire con il DOM, ne può manipolare il
contenuto, può aggiungere , modificare o rimuovere elementi da questa struttura ad albero.
Questa tipologia di operazioni, sono in effetti, molto leggere, tuttavia ogni volta che un elemento del
DOM viene modificato, il browser ha bisogno di eseguire nuovamente il rendering dell’intera pagina.
Di conseguenza il browser, dovrà ricreare ogni volta una nuova struttura ad albero, e dovrà ovviamente
calcolare nuovamente il CSS, per essere in grado di “ridisegnare” la pagina che stiamo visualizzando.
#howToReact
DOM: Document Object Model
Esempio di DOM
#howToReact
HTML
head body
meta link title p div
strong Hello,
world!
img
Virtual DOM
Come abbiamo detto poco fa, React è una libreria basata sui componenti.
Un componente React viene ri-renderizzato, solo quando cambia uno stato da cui dipende, una props o se il
suo diretto genitore esegue nuovamente il rendering.
Ovviamente React non può sopportare il peso computazionale di dover ri-renderizzare tutto il DOM ogni
volta che un componente deve essere renderizzato nuovamente.
Per questo motivo React introduce il concetto di Virtual DOM.
Il DOM Virtuale, è una rappresentazione del DOM reale, non è altro che un oggetto JavaScript creato per
replicare il DOM.
A differenza del DOM reale, il DOM Virtuale è “economico”, in termini computazionali, non deve
“disegnare”, nulla sulla pagina, ha solamente il compito di confrontare sé stesso con il DOM reale e
capire quali sono gli elementi che necessitato di essere ri-renderizzati, SOLO gli elementi che ne
necessitano.
Questo è il segreto della “Reattività” di React.
#howToReact
Virtual DOM
Virtual Dom
#howToReact
Component
Component Component
Component Component Component Component
Component Component
Diff
Re-rendered
Real Dom
Component
Component Component
Component Component Component Component
Component Component
const element = (
<h1 className=”greeting”>
Hello, World!
</h1>
);
const element = React.createElement(
“h1”,
{className:”greeting”},
“Hello, World!”
);
JSX: Javascript Syntax Extension
JSX è un’estensione della sintassi per
JavaScript che ci consente di scrivere
markup simile all’HTML all’interno di un
file JavaScript.
Babel compila JSX in chiamate ad un API di
primo livello di React,
React.createElement().
Possiamo dire quindi che i primi due esempi
a destra , sono esattamente la stessa
porzione di codice , ma scritta in maniera
diversa.
React, utilizza quindi, la funzione
createElement(), per poter ottenere un
oggetto con il quale costruire quell’
esatta porzione di DOM.
#howToReact
const element = {
type : “h1”,
props:{
className:”greeting”,
children:”Hello, World!”
}
};
const SayHello = (props) => {
const { name } = props;
return <span>Hello, {name}</span>
};
const SayHelloAndButton = () => {
return (
<>
<SayHello name=”John” />
<MyButton />
</>
)
};
Componenti
I Componenti ci permettono di suddividere
l’interfaccia utente in parti indipendenti
e riutilizzabili.
A livello concettuale, i componenti sono
come delle funzioni JavaScript ,ai quali
possiamo dare un nome, accettano in input
un oggetto che chiameremo “props”
(properties) e ritornano del JSX , quindi
degli oggetti che descrivono cosa deve
apparire sullo schermo.
#howToReact
const MyButton = () => {
return <button>Click Me!</span>
};
Stato Applicativo
Di cosa si tratta ?
I componenti spesso devono cambiare ciò che appare sullo schermo a seguito di un’interazione da parte
dell’utente, ad esempio, al click di un bottone deve cambiare il tema da “light” a “dark”, o se
l’utente sta scrivendo all’interno di un campo di input, deve ricordarne il valore, o se clicca il
pulsante “avanti” nelle slides di un carosello, la slide da visualizzare deve cambiare.
I componenti devono essere in grado di “ricordare” tutte queste cose, in React questo tipo di memoria
viene chiamata State, stato applicativo.
#howToReact
#howToReact
Layers di stato
Stato
UI State Server State
Stato applicativo
dedicato alla
gestione della
UI.
Stato applicativo
ottenuto dal
server.
const Counter = () => {
const [counter , setCounter] = useState(0)
return <span>Counter : {counter}</span>
};
Gestione dello stato locale: useState()
In passato, quando i componenti funzionali
in react erano dedicati esclusivamente alla
renderizzazione del componente, venivano
utilizzate le classi per gestire il
lifecycle e lo stato applicativo.
Oggi react mette a disposizione un concetto
molto potente, gli “Hooks”.
React.useState() è l’hook dedicato alla
gestione dello stato applicativo locale, ci
permette di aggiungere una variabile di
stato al nostro componente.
#howToReact
const Counter = () => {
const [counter , setCounter] = useState(0)
return <span>Counter : {counter}</span>
};
useState() : Come utilizzarlo
Chiamiamo l’hook useState() al livello
superiore del nostro componente, per
dichiarare una o più variabili di stato
locale.
useState() restituisce due valori:
1) Lo stato corrente
2) La funzione di set che ci
consente di cambiarlo.
#howToReact
const ManyCounters = () => {
const [counter , setCounter] = useState(0)
const [counterTwo , setCounterTwo] = useState(0)
return (
<>
<span>Counter : {counter}</span>
<span>CounterTwo : {counterTwo}</span>
</>
)
};
#howToReact
Live Coding
Condivisione di uno stato locale: Props Drilling
I componenti in react usano degli oggetti
(props) per comunicare tra di loro, e
condividere stato applicativo.
Questi oggetti potrebbero ricordarti gli
attributi HTML ma in realtà, è possibile
passare da un componente padre, ad un
componente figlio, qualsiasi tipo di
valore, inclusi array, oggetti e funzioni.
Nell’esempio a destra, il componente
CounterFather sta condividendo un
porzione del suo stato applicativo, con il
componente figlio CounterChild.
#howToReact
const CounterChild = (props) => {
const { counter } = props;
return <span>Counter: {counter}</span>
};
const CounterFather = () => {
const [counter , setCounter] = useState(0)
return <CounterChild counter={counter} />
};
#howToReact
Live Coding
#howToReact
React Context
Cos’è un context?
Condividere stato globale
Per poter condividere dello stato applicativo tra un componente padre ed un componente figlio, possiamo
avvalerci dell’uso delle props, ma man mano che la nostra applicazione cresce, avremo sempre più
componenti innestati tra di loro, questo rende la condivisione di stato applicativo tra i componenti
sempre più confusionaria e poco manutenibile.
Per ovviare a questo problema, react ci fornisce uno strumento chiamato Context.
Il Context o “contesto”, consente al padre di rendere disponibili alcune informazioni, a qualsiasi
componente nell’albero sottostante, a qualsiasi profondità, senza condividerle esplicitamente
attraverso le props.
#howToReact
#howToReact
Live Coding
useReducer
Gestire uno stato complesso
Man mano che la nostra applicazione cresce, crescerà anche la quantità e la complessità del nostro
stato applicativo.
Una situazione comune, in applicazioni react di media grandezza, è quella di ritrovarsi con componenti
che dichiarano un infinità di useState(), per essere in grado di gestire più variabili di stato.
Qui ci viene in aiuto l’hook useReducer().
#howToReact
Gestione di uno stato complesso: useReducer()
L’hook useReducer() ci permette di aggiungere una funzione chiamata reducer ai nostri componenti.
Come abbiamo visto per l’hook useState() anche qui chiameremo l’hook useReducer() al livello più alto
del nostro componente.
useReducer() richiede, appunto, una funzione reducer,ed uno stato iniziale, e mette a disposizione lo
stato corrente, più una funzione che chiameremo per convenzione dispatch.
#howToReact
const CounterWithReducer = (props) => {
const [state , dispatch] = React.useReducer(reducer ,{count:0});
return <span>Counter: {state.count}</span>
};
#howToReact
Live Coding
❏ Basi di React.js
❏ Gestione stato locale con hooks
❏ Condivisione di stato “Props
Drilling”
❏ Condivisione di stato
“React.Context”
#howToReact
Next
Wrap Up
❏ Ui State vs Server State
❏ Custom Hooks
❏ Global Ui State con Recoil.js
❏ Server Cache State React Query
Aldo Noschese x Riccardo Tartaglia
thank.u!
see u next time

More Related Content

Similar to How To React - Gestione Stato Applicativo

Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2Ivan Gualandri
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciutaAndrea Dottor
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven DesignAndrea Saltarello
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsAndrea Dottor
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerMatteo Magni
 
Sviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsSviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsNoDelay Software
 
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...Codemotion
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerMatteo Magni
 
jQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerjQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerMatteo Magni
 
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaSviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaMarco Breveglieri
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS BuildGian Maria Ricci
 

Similar to How To React - Gestione Stato Applicativo (20)

Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2Introduzione alla programmazione android - Android@tulug lezione 2
Introduzione alla programmazione android - Android@tulug lezione 2
 
Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
Programming iOS lezione 4
Programming iOS lezione 4Programming iOS lezione 4
Programming iOS lezione 4
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciuta
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 
Javascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesignerJavascript - 7 | WebMaster & WebDesigner
Javascript - 7 | WebMaster & WebDesigner
 
Sviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsSviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I Os
 
Html5 e PHP
Html5 e PHPHtml5 e PHP
Html5 e PHP
 
Umarells
UmarellsUmarells
Umarells
 
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
Tech Webinar: Advanced AngularJS, tecniche avanzate per padroneggiare il fram...
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
 
jQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerjQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesigner
 
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaSviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, Piacenza
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS Build
 
Lezione js pdatabasecrudterzaparte
Lezione js pdatabasecrudterzaparteLezione js pdatabasecrudterzaparte
Lezione js pdatabasecrudterzaparte
 

Recently uploaded

GIORNATA TECNICA 18/04 | DE LEO Antonio
GIORNATA TECNICA 18/04  | DE LEO AntonioGIORNATA TECNICA 18/04  | DE LEO Antonio
GIORNATA TECNICA 18/04 | DE LEO AntonioServizi a rete
 
Presentzione Matematica similitudini circonferenze e omotetie.pptx
Presentzione  Matematica similitudini circonferenze e omotetie.pptxPresentzione  Matematica similitudini circonferenze e omotetie.pptx
Presentzione Matematica similitudini circonferenze e omotetie.pptxfilippoluciani9
 
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleGIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleServizi a rete
 
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneGIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneServizi a rete
 
GIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroGIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroServizi a rete
 
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaGIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaServizi a rete
 
Descrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxDescrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxtecongo2007
 
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoGIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoServizi a rete
 
GIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoGIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoServizi a rete
 

Recently uploaded (9)

GIORNATA TECNICA 18/04 | DE LEO Antonio
GIORNATA TECNICA 18/04  | DE LEO AntonioGIORNATA TECNICA 18/04  | DE LEO Antonio
GIORNATA TECNICA 18/04 | DE LEO Antonio
 
Presentzione Matematica similitudini circonferenze e omotetie.pptx
Presentzione  Matematica similitudini circonferenze e omotetie.pptxPresentzione  Matematica similitudini circonferenze e omotetie.pptx
Presentzione Matematica similitudini circonferenze e omotetie.pptx
 
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO RaffaeleGIORNATA TECNICA 18/04 | LITTERIO Raffaele
GIORNATA TECNICA 18/04 | LITTERIO Raffaele
 
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA SimoneGIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
GIORNATA TECNICA DA AQP 18/04 | MOTTA Simone
 
GIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI AlessandroGIORNATA TECNICA 18/04 | BENANTI Alessandro
GIORNATA TECNICA 18/04 | BENANTI Alessandro
 
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO SerenaGIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
GIORNATA TECNICA DA AQP 18/04 | ZONNO Serena
 
Descrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptxDescrizione della struttura architettonica Eretteo.pptx
Descrizione della struttura architettonica Eretteo.pptx
 
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI MassimoGIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
GIORNATA TECNICA 18/04 | SPIZZIRRI Massimo
 
GIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA RobertoGIORNATA TECNICA 18/04 | DE ROSA Roberto
GIORNATA TECNICA 18/04 | DE ROSA Roberto
 

How To React - Gestione Stato Applicativo

  • 1. How To React Come gestire lo stato in un’applicazione React.js Aldo Noschese x Riccardo Tartaglia
  • 2. #howToReact Aldo Noschese Front-end Dev @ weBeetle Riccardo Tartaglia Full-Stack Dev @ weBeetle @noschese_aldo aldo-noschese-5b9101193 @riktarweb riccardo-tartaglia
  • 4. Cos’è React? React.js è una delle librerie JavaScript più popolari per costruire interfacce utente,viene utilizzata sia per creare Web App, che Mobile App (React Native). L’interfaccia utente è costituita da piccole unità (componenti), come testi, pulsanti o immagini, che React ci consente appunto, di combinare e riutilizzare. #howToReact
  • 5. ❏ Facile da imparare e da usare ❏ Community vasta ❏ Libertà nelle scelte architetturali ❏ Virtual DOM #howToReact CONTRO PRO ❏ Scarsa documentazione ❏ Tecnologia “dinamica” ❏ Libertà nelle scelte architetturali
  • 6. DOM: Document Object Model Ogni volta che viene caricato un documento web, come ad esempio dell’HTML, il browser crea una rappresentazione ad oggetti di quel documento, una struttura ad albero. Questa rappresentazione viene chiamata DOM. Grazie alla sua natura basata sugli oggetti, JavaScript può interagire con il DOM, ne può manipolare il contenuto, può aggiungere , modificare o rimuovere elementi da questa struttura ad albero. Questa tipologia di operazioni, sono in effetti, molto leggere, tuttavia ogni volta che un elemento del DOM viene modificato, il browser ha bisogno di eseguire nuovamente il rendering dell’intera pagina. Di conseguenza il browser, dovrà ricreare ogni volta una nuova struttura ad albero, e dovrà ovviamente calcolare nuovamente il CSS, per essere in grado di “ridisegnare” la pagina che stiamo visualizzando. #howToReact
  • 7. DOM: Document Object Model Esempio di DOM #howToReact HTML head body meta link title p div strong Hello, world! img
  • 8. Virtual DOM Come abbiamo detto poco fa, React è una libreria basata sui componenti. Un componente React viene ri-renderizzato, solo quando cambia uno stato da cui dipende, una props o se il suo diretto genitore esegue nuovamente il rendering. Ovviamente React non può sopportare il peso computazionale di dover ri-renderizzare tutto il DOM ogni volta che un componente deve essere renderizzato nuovamente. Per questo motivo React introduce il concetto di Virtual DOM. Il DOM Virtuale, è una rappresentazione del DOM reale, non è altro che un oggetto JavaScript creato per replicare il DOM. A differenza del DOM reale, il DOM Virtuale è “economico”, in termini computazionali, non deve “disegnare”, nulla sulla pagina, ha solamente il compito di confrontare sé stesso con il DOM reale e capire quali sono gli elementi che necessitato di essere ri-renderizzati, SOLO gli elementi che ne necessitano. Questo è il segreto della “Reattività” di React. #howToReact
  • 9. Virtual DOM Virtual Dom #howToReact Component Component Component Component Component Component Component Component Component Diff Re-rendered Real Dom Component Component Component Component Component Component Component Component Component
  • 10. const element = ( <h1 className=”greeting”> Hello, World! </h1> ); const element = React.createElement( “h1”, {className:”greeting”}, “Hello, World!” ); JSX: Javascript Syntax Extension JSX è un’estensione della sintassi per JavaScript che ci consente di scrivere markup simile all’HTML all’interno di un file JavaScript. Babel compila JSX in chiamate ad un API di primo livello di React, React.createElement(). Possiamo dire quindi che i primi due esempi a destra , sono esattamente la stessa porzione di codice , ma scritta in maniera diversa. React, utilizza quindi, la funzione createElement(), per poter ottenere un oggetto con il quale costruire quell’ esatta porzione di DOM. #howToReact const element = { type : “h1”, props:{ className:”greeting”, children:”Hello, World!” } };
  • 11. const SayHello = (props) => { const { name } = props; return <span>Hello, {name}</span> }; const SayHelloAndButton = () => { return ( <> <SayHello name=”John” /> <MyButton /> </> ) }; Componenti I Componenti ci permettono di suddividere l’interfaccia utente in parti indipendenti e riutilizzabili. A livello concettuale, i componenti sono come delle funzioni JavaScript ,ai quali possiamo dare un nome, accettano in input un oggetto che chiameremo “props” (properties) e ritornano del JSX , quindi degli oggetti che descrivono cosa deve apparire sullo schermo. #howToReact const MyButton = () => { return <button>Click Me!</span> };
  • 12. Stato Applicativo Di cosa si tratta ? I componenti spesso devono cambiare ciò che appare sullo schermo a seguito di un’interazione da parte dell’utente, ad esempio, al click di un bottone deve cambiare il tema da “light” a “dark”, o se l’utente sta scrivendo all’interno di un campo di input, deve ricordarne il valore, o se clicca il pulsante “avanti” nelle slides di un carosello, la slide da visualizzare deve cambiare. I componenti devono essere in grado di “ricordare” tutte queste cose, in React questo tipo di memoria viene chiamata State, stato applicativo. #howToReact
  • 13. #howToReact Layers di stato Stato UI State Server State Stato applicativo dedicato alla gestione della UI. Stato applicativo ottenuto dal server.
  • 14. const Counter = () => { const [counter , setCounter] = useState(0) return <span>Counter : {counter}</span> }; Gestione dello stato locale: useState() In passato, quando i componenti funzionali in react erano dedicati esclusivamente alla renderizzazione del componente, venivano utilizzate le classi per gestire il lifecycle e lo stato applicativo. Oggi react mette a disposizione un concetto molto potente, gli “Hooks”. React.useState() è l’hook dedicato alla gestione dello stato applicativo locale, ci permette di aggiungere una variabile di stato al nostro componente. #howToReact
  • 15. const Counter = () => { const [counter , setCounter] = useState(0) return <span>Counter : {counter}</span> }; useState() : Come utilizzarlo Chiamiamo l’hook useState() al livello superiore del nostro componente, per dichiarare una o più variabili di stato locale. useState() restituisce due valori: 1) Lo stato corrente 2) La funzione di set che ci consente di cambiarlo. #howToReact const ManyCounters = () => { const [counter , setCounter] = useState(0) const [counterTwo , setCounterTwo] = useState(0) return ( <> <span>Counter : {counter}</span> <span>CounterTwo : {counterTwo}</span> </> ) };
  • 17. Condivisione di uno stato locale: Props Drilling I componenti in react usano degli oggetti (props) per comunicare tra di loro, e condividere stato applicativo. Questi oggetti potrebbero ricordarti gli attributi HTML ma in realtà, è possibile passare da un componente padre, ad un componente figlio, qualsiasi tipo di valore, inclusi array, oggetti e funzioni. Nell’esempio a destra, il componente CounterFather sta condividendo un porzione del suo stato applicativo, con il componente figlio CounterChild. #howToReact const CounterChild = (props) => { const { counter } = props; return <span>Counter: {counter}</span> }; const CounterFather = () => { const [counter , setCounter] = useState(0) return <CounterChild counter={counter} /> };
  • 20. Cos’è un context? Condividere stato globale Per poter condividere dello stato applicativo tra un componente padre ed un componente figlio, possiamo avvalerci dell’uso delle props, ma man mano che la nostra applicazione cresce, avremo sempre più componenti innestati tra di loro, questo rende la condivisione di stato applicativo tra i componenti sempre più confusionaria e poco manutenibile. Per ovviare a questo problema, react ci fornisce uno strumento chiamato Context. Il Context o “contesto”, consente al padre di rendere disponibili alcune informazioni, a qualsiasi componente nell’albero sottostante, a qualsiasi profondità, senza condividerle esplicitamente attraverso le props. #howToReact
  • 22. useReducer Gestire uno stato complesso Man mano che la nostra applicazione cresce, crescerà anche la quantità e la complessità del nostro stato applicativo. Una situazione comune, in applicazioni react di media grandezza, è quella di ritrovarsi con componenti che dichiarano un infinità di useState(), per essere in grado di gestire più variabili di stato. Qui ci viene in aiuto l’hook useReducer(). #howToReact
  • 23. Gestione di uno stato complesso: useReducer() L’hook useReducer() ci permette di aggiungere una funzione chiamata reducer ai nostri componenti. Come abbiamo visto per l’hook useState() anche qui chiameremo l’hook useReducer() al livello più alto del nostro componente. useReducer() richiede, appunto, una funzione reducer,ed uno stato iniziale, e mette a disposizione lo stato corrente, più una funzione che chiameremo per convenzione dispatch. #howToReact const CounterWithReducer = (props) => { const [state , dispatch] = React.useReducer(reducer ,{count:0}); return <span>Counter: {state.count}</span> };
  • 25. ❏ Basi di React.js ❏ Gestione stato locale con hooks ❏ Condivisione di stato “Props Drilling” ❏ Condivisione di stato “React.Context” #howToReact Next Wrap Up ❏ Ui State vs Server State ❏ Custom Hooks ❏ Global Ui State con Recoil.js ❏ Server Cache State React Query
  • 26. Aldo Noschese x Riccardo Tartaglia thank.u! see u next time