(Go: >> BACK << -|- >> HOME <<)

SlideShare a Scribd company logo
@eduardcapanu
React Query: gestione
efficiente dei dati nelle
app React
Eduard Andrei Capanu Microsoft 365 React JavaScript
Frontend Developer & Trainer
—
React - TypeScript - JavaScript
๏ Computer science lover & sviluppatore
software full-time
๏ Ho lavorato per 5 anni con tecnologie
Microsoft
๏ Appassionato di JavaScript & React
๏ Condividere e apprendere il piu’ possibile
Di cosa parleremo in questo talk?
Introduzione della libreria
Client VS Server State
React Query Examples
Features utili
Introduzione del software TanStack
Non si tratta solo di Data
Fetching
Introduzione del software TanStack
- Non è un framework o una libreria
- Si tratta di un set di tecnologie in grado di offrire
soluzioni e feature per lo sviluppo con React, Next.JS
e TypeScript
- Con il tempo si sono espansi offrendo i stessi servizi
anche per altre librerie / framework come Angular,
Svelte, Rue ecc.
Introduzione della libreria - Cos’è React Query?
“È una libreria per la gestione asincrona
dello stato applicativo”
- Spesso confuso con una libreria per il fetching dei dati
- Se usi un framework con delle soluzioni di fetching e mutazioni già esistenti, forse
non hai bisogno anche di React Query
- A primo impatto potrebbe non sembrare allettante, ma vediamo meglio i vantaggi che
ci porta
Perchè introdurre un’altra libreria per fare delle fetch?
Posso usare benissimo fetch + useEffect!
Code exploration
Introduzione della libreria - Perché dovresti averne bisogno?
Abbiamo quasi
5 bug qui
Introduzione della libreria - Perché dovresti averne bisogno?
- Persino la documentazione ufficiale di React consiglia di usare un’altra libreria o
framework per il data fetching
Il primo -> Race Condition
Lo stato cambia con ID -> 2
Viene effettuata una fetch per il
Todo con ID -> 1, che ci mette
troppo a rispondere
Il problema è che alla
fine la chiamata con
ID2 risponde per prima
e quella con ID1 per
ultima.
Quindi lo stato si
aggiorna con il risultato
della prima chiamata e
non dell’ultima.
Per cui mostriamo dati
sbagliati
1 Bug
Il primo -> Race Condition (Soluzione)
Viene eseguita quando il
‘todoId’ cambia
Se ‘todoId’ cambia, la if della fetch precedente
risulterà false e non andremo a settare i dati
1 Bug
I secondo -> Il Loading
2 Bug
Se vogliamo gestire il loading sulla nostra
chiamata dobbiamo creare un nuovo state
Implementarlo per gestire il loading ad
ogni chiamata
E pulirlo ogni volta che la fetch finisce
I terzo -> Lo stato vuoto
3 Bug
Se vogliamo avere evidenza della
differenza tra ‘non ho ancora dati’ e
‘non ho mai avuto dati’, dobbiamo
andare a settare lo state di React ad
undefined.
Cosi, nel caso la risposta ci torni un
obj / array vuoto, sapremo che è stata
la risposta a non tornarci risultati e
che ora lo stato è aggiornato con lo
stesso valore del server.
Stato undefined
I quarto -> Il reset dei Dati e degli Errori
4 Bug
- Lo stato che usiamo per i nostri dati e quello che usiamo per gli errori sono separati.
- Questo significa che se non facciamo manualmente dei RESET, possiamo andare nella casistica
in cui i nostri dati si aggiornano ma rimaniamo con gli errori precedenti mostrati a UI.
Dipende da come usiamo l’errore nel JSX, se
controlliamo ‘error’ per primo avremo un problema
4 Bug
I quarto -> Il reset dei Dati e degli Errori
Puliamo gli errori in fase di set dei nuovi dati
Puliamo i dati in fase di set degli errori
I quinto -> Doppie chiamate in StrictMode
5 Bug
- Non un bug vero è proprio ma decisamente una cosa fastidiosa
- Il 90% di noi penso faccia uso di <React.StrictMode>
- Quando usato, i nostri effect vengono lanciati 2 volte per ‘aiutarci’ a trovare
bug come ad esempio la mancanza di funzioni di cleanup negli effect
Codice finale di una ‘semplice’ fetch
Ma non doveva essere
semplice?
Conclusione?
Il Data Fetching è semplice
La Gestione Dello Stato Asincrona non lo è
Quello che React Query gestisce per noi
- Hai ragione a dire che non vuoi React Query per una cosa come fetchare i dati, perché alla
fine anche con essa il codice di fetch lo devi scrivere comunque.
- Ma è molto probabile che ti servirà per rendere il tuo stato prevedibile e per la gestione
asincrona degli eventi che vanno ad aggiornare lo stato.
Prima di vedere il codice con React Query,
aggiungiamo queste 2 righe per creare il
contesto in cui la libreria possa agire
Quello che React Query gestisce per noi
Solamente 10 righe di codice per gestire il tutto.
PS: Qui ci sta anche un BONUS -> la gestione
della throw della fetch
Quello che React Query gestisce per noi
- Non abbiamo più problemi di Race Condition
- Abbiamo il loading, gli data e gli errori inclusi, senza gestioni multiple
- Gli stati vuoti vengono gestiti automaticamente e possono essere sovrascritti con
‘placeholderData’ se serve
- Non si avranno stati disallineati tra i data e gli errori, almeno che non lo vogliamo
- Le fetch multiple sono deduplicate, persino quelle in StrictMode
Client VS Server state
- Possiamo pensare al Client State come a tutte quelle operazioni sincrone che andiamo a
gestire o manipolare
- Solo noi possiamo cambiarlo
- Viene distrutto quando il browser cambia
- Disponibile in modo istantaneo
- Sempre aggiornato
- Ci riferiamo al Server State quando abbiamo a che fare con dati che non sono nostri,
come ad esempio quelli ricevuti da chiamate POST
- Vediamo solo una parte dei dati e non sappiamo mai se sono aggiornati al 100%
- Controllati da altri servizi / utenti
- Sono condivisi per più sessioni di browser
- Sono asincroni, ci serve del tempo per prendere i dati dal server e riportarli sul
client
The Story of React Query
The Story of React Query: https:/
/www.youtube.com/watch?v=OrliU0e09io
Features utili
Caching Automatic refetching
Fetch retry Pagination utilities
Mutations Optimistic update utilities
And more
@eduardcapanu
React Query - gestione efficiente dei dati nelle app React - Updated (Eduard Capanu).pdf
https:/
/eduardcapanu.gumroad.com/l/reacttipsandtriks
๏ react mysteries like the double render explained
๏ features explained (like portals, lazy loading ecc.)
๏ how the life cycle works
๏ common mistakes
๏ what DevTools can do
๏ library under the hood information (prop drilling, high-order
components, react canary, Virtual DOM ecc.)
๏ React insights about the version 18 & 19
๏ some tips that can help you during the interview questions
30+ Free React Tips & Tricks
React Query: gestione efficiente
dei dati nelle app React
Ci vediamo al prossimo talk ☺
@capanu2
@eduardcapanu
https:/
/eduardcapanu.com
@eduard_capanu_dev

More Related Content

Similar to React Query - gestione efficiente dei dati nelle app React - Updated (Eduard Capanu).pdf

TDD in WordPress
TDD in WordPressTDD in WordPress
TDD in WordPress
lucatume
 
Introduzione a..django
Introduzione a..djangoIntroduzione a..django
Introduzione a..django
Luca Forzutti
 
How To React - Aspetti avanzati della gestione dello stato
How To React - Aspetti avanzati della gestione dello statoHow To React - Aspetti avanzati della gestione dello stato
How To React - Aspetti avanzati della gestione dello stato
AldoNoschese
 
Perché è così difficile il deploy dei database - DevCast DevOps Serie
Perché è così difficile il deploy dei database  - DevCast DevOps SeriePerché è così difficile il deploy dei database  - DevCast DevOps Serie
Perché è così difficile il deploy dei database - DevCast DevOps Serie
Giulio Vian
 
How To React - Gestione Stato Applicativo
How To React - Gestione Stato ApplicativoHow To React - Gestione Stato Applicativo
How To React - Gestione Stato Applicativo
AldoNoschese
 
04 Tapestry5 In Action Pratica
04   Tapestry5 In Action   Pratica04   Tapestry5 In Action   Pratica
04 Tapestry5 In Action Pratica
bobpuley
 
TTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug romaTTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug roma
diego mauricio lagos morales
 
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Marco Parenzan
 
2. Che cosa e' un Server - Siceg.it - it management
2. Che cosa e' un Server -  Siceg.it - it management2. Che cosa e' un Server -  Siceg.it - it management
2. Che cosa e' un Server - Siceg.it - it management
SICeG S.r.l.
 
Lezione Servlet Natalizi
Lezione Servlet NataliziLezione Servlet Natalizi
Con Aruba, a lezione di cloud - #lezione 27: 'Private Cloud e mail server az...
Con Aruba, a lezione di cloud  - #lezione 27: 'Private Cloud e mail server az...Con Aruba, a lezione di cloud  - #lezione 27: 'Private Cloud e mail server az...
Con Aruba, a lezione di cloud - #lezione 27: 'Private Cloud e mail server az...
Aruba S.p.A.
 
PhpUnit
PhpUnitPhpUnit
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
Aruba S.p.A.
 
Concurrency
ConcurrencyConcurrency
Concurrency
Ugo Landini
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
Francesca1980
 
Help Framakey WebApps
Help Framakey WebAppsHelp Framakey WebApps
Help Framakey WebApps
roberto marcolin
 
Lezione programmazione database con java Servlet - quarta parte
Lezione programmazione database con java Servlet - quarta parteLezione programmazione database con java Servlet - quarta parte
Lezione programmazione database con java Servlet - quarta parte
Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA
 
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Donato Clun
 
Lezione JSP database Crud
Lezione JSP database CrudLezione JSP database Crud

Similar to React Query - gestione efficiente dei dati nelle app React - Updated (Eduard Capanu).pdf (20)

Lezione js pdatabasecrudterzaparte
Lezione js pdatabasecrudterzaparteLezione js pdatabasecrudterzaparte
Lezione js pdatabasecrudterzaparte
 
TDD in WordPress
TDD in WordPressTDD in WordPress
TDD in WordPress
 
Introduzione a..django
Introduzione a..djangoIntroduzione a..django
Introduzione a..django
 
How To React - Aspetti avanzati della gestione dello stato
How To React - Aspetti avanzati della gestione dello statoHow To React - Aspetti avanzati della gestione dello stato
How To React - Aspetti avanzati della gestione dello stato
 
Perché è così difficile il deploy dei database - DevCast DevOps Serie
Perché è così difficile il deploy dei database  - DevCast DevOps SeriePerché è così difficile il deploy dei database  - DevCast DevOps Serie
Perché è così difficile il deploy dei database - DevCast DevOps Serie
 
How To React - Gestione Stato Applicativo
How To React - Gestione Stato ApplicativoHow To React - Gestione Stato Applicativo
How To React - Gestione Stato Applicativo
 
04 Tapestry5 In Action Pratica
04   Tapestry5 In Action   Pratica04   Tapestry5 In Action   Pratica
04 Tapestry5 In Action Pratica
 
TTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug romaTTT - Test, Tools and Tips - jug roma
TTT - Test, Tools and Tips - jug roma
 
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
 
2. Che cosa e' un Server - Siceg.it - it management
2. Che cosa e' un Server -  Siceg.it - it management2. Che cosa e' un Server -  Siceg.it - it management
2. Che cosa e' un Server - Siceg.it - it management
 
Lezione Servlet Natalizi
Lezione Servlet NataliziLezione Servlet Natalizi
Lezione Servlet Natalizi
 
Con Aruba, a lezione di cloud - #lezione 27: 'Private Cloud e mail server az...
Con Aruba, a lezione di cloud  - #lezione 27: 'Private Cloud e mail server az...Con Aruba, a lezione di cloud  - #lezione 27: 'Private Cloud e mail server az...
Con Aruba, a lezione di cloud - #lezione 27: 'Private Cloud e mail server az...
 
PhpUnit
PhpUnitPhpUnit
PhpUnit
 
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
Con Aruba, a lezione di cloud #lezione 21 - parte 1: 'Load balancer, la guida...
 
Concurrency
ConcurrencyConcurrency
Concurrency
 
Loosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain modelLoosely Coupled Complexity - Unleash the power of your domain model
Loosely Coupled Complexity - Unleash the power of your domain model
 
Help Framakey WebApps
Help Framakey WebAppsHelp Framakey WebApps
Help Framakey WebApps
 
Lezione programmazione database con java Servlet - quarta parte
Lezione programmazione database con java Servlet - quarta parteLezione programmazione database con java Servlet - quarta parte
Lezione programmazione database con java Servlet - quarta parte
 
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
 
Lezione JSP database Crud
Lezione JSP database CrudLezione JSP database Crud
Lezione JSP database Crud
 

More from EduardCapanu

Beyond the Cache sfruttare appieno le potenzialità dei Service Worker (Eduar...
Beyond the Cache sfruttare appieno le potenzialità dei Service Worker (Eduar...Beyond the Cache sfruttare appieno le potenzialità dei Service Worker (Eduar...
Beyond the Cache sfruttare appieno le potenzialità dei Service Worker (Eduar...
EduardCapanu
 
Azure Cognitive Service (Eduard Capanu).pptx
Azure Cognitive Service (Eduard Capanu).pptxAzure Cognitive Service (Eduard Capanu).pptx
Azure Cognitive Service (Eduard Capanu).pptx
EduardCapanu
 
La guida ai lifecycle dei componenti in React (Eduard Capanu).pptx
La guida ai lifecycle dei componenti in React (Eduard Capanu).pptxLa guida ai lifecycle dei componenti in React (Eduard Capanu).pptx
La guida ai lifecycle dei componenti in React (Eduard Capanu).pptx
EduardCapanu
 
Power Apps Introduction (Eduard Capanu).pptx
Power Apps Introduction (Eduard Capanu).pptxPower Apps Introduction (Eduard Capanu).pptx
Power Apps Introduction (Eduard Capanu).pptx
EduardCapanu
 
Come pensare in TypeScript (Part 2) (Eduard Capanu).pptx
Come pensare in TypeScript (Part 2) (Eduard Capanu).pptxCome pensare in TypeScript (Part 2) (Eduard Capanu).pptx
Come pensare in TypeScript (Part 2) (Eduard Capanu).pptx
EduardCapanu
 
Come pensare in TypeScript (Part 1) (Eduard Capanu).pptx
Come pensare in TypeScript (Part 1) (Eduard Capanu).pptxCome pensare in TypeScript (Part 1) (Eduard Capanu).pptx
Come pensare in TypeScript (Part 1) (Eduard Capanu).pptx
EduardCapanu
 
Impara React sfruttando le tecnologie più recenti (Eduard Capanu).pptx
Impara React sfruttando le tecnologie più recenti (Eduard Capanu).pptxImpara React sfruttando le tecnologie più recenti (Eduard Capanu).pptx
Impara React sfruttando le tecnologie più recenti (Eduard Capanu).pptx
EduardCapanu
 

More from EduardCapanu (7)

Beyond the Cache sfruttare appieno le potenzialità dei Service Worker (Eduar...
Beyond the Cache sfruttare appieno le potenzialità dei Service Worker (Eduar...Beyond the Cache sfruttare appieno le potenzialità dei Service Worker (Eduar...
Beyond the Cache sfruttare appieno le potenzialità dei Service Worker (Eduar...
 
Azure Cognitive Service (Eduard Capanu).pptx
Azure Cognitive Service (Eduard Capanu).pptxAzure Cognitive Service (Eduard Capanu).pptx
Azure Cognitive Service (Eduard Capanu).pptx
 
La guida ai lifecycle dei componenti in React (Eduard Capanu).pptx
La guida ai lifecycle dei componenti in React (Eduard Capanu).pptxLa guida ai lifecycle dei componenti in React (Eduard Capanu).pptx
La guida ai lifecycle dei componenti in React (Eduard Capanu).pptx
 
Power Apps Introduction (Eduard Capanu).pptx
Power Apps Introduction (Eduard Capanu).pptxPower Apps Introduction (Eduard Capanu).pptx
Power Apps Introduction (Eduard Capanu).pptx
 
Come pensare in TypeScript (Part 2) (Eduard Capanu).pptx
Come pensare in TypeScript (Part 2) (Eduard Capanu).pptxCome pensare in TypeScript (Part 2) (Eduard Capanu).pptx
Come pensare in TypeScript (Part 2) (Eduard Capanu).pptx
 
Come pensare in TypeScript (Part 1) (Eduard Capanu).pptx
Come pensare in TypeScript (Part 1) (Eduard Capanu).pptxCome pensare in TypeScript (Part 1) (Eduard Capanu).pptx
Come pensare in TypeScript (Part 1) (Eduard Capanu).pptx
 
Impara React sfruttando le tecnologie più recenti (Eduard Capanu).pptx
Impara React sfruttando le tecnologie più recenti (Eduard Capanu).pptxImpara React sfruttando le tecnologie più recenti (Eduard Capanu).pptx
Impara React sfruttando le tecnologie più recenti (Eduard Capanu).pptx
 

Recently uploaded

CONVEGNO DA IRETI 18 giugno 2024 | TELLINI Tania
CONVEGNO DA IRETI 18 giugno 2024 | TELLINI TaniaCONVEGNO DA IRETI 18 giugno 2024 | TELLINI Tania
CONVEGNO DA IRETI 18 giugno 2024 | TELLINI Tania
Servizi a rete
 
CONVEGNO DA IRETI 18 giugno 2024 | GAMBARDELLA Alberto
CONVEGNO DA IRETI 18 giugno 2024 | GAMBARDELLA AlbertoCONVEGNO DA IRETI 18 giugno 2024 | GAMBARDELLA Alberto
CONVEGNO DA IRETI 18 giugno 2024 | GAMBARDELLA Alberto
Servizi a rete
 
CONVEGNO DA IRETI 18 giugno 2024 | OTTOLINI Stefano
CONVEGNO DA IRETI 18 giugno 2024 | OTTOLINI StefanoCONVEGNO DA IRETI 18 giugno 2024 | OTTOLINI Stefano
CONVEGNO DA IRETI 18 giugno 2024 | OTTOLINI Stefano
Servizi a rete
 
CONVEGNO DA IRETI 18 giugno 2024 | BARBONE Daniele
CONVEGNO DA IRETI 18 giugno 2024 |  BARBONE DanieleCONVEGNO DA IRETI 18 giugno 2024 |  BARBONE Daniele
CONVEGNO DA IRETI 18 giugno 2024 | BARBONE Daniele
Servizi a rete
 
Summary of: “A Perspective Vision of Micro/Nano Systems and Technologies as E...
Summary of: “A Perspective Vision of Micro/Nano Systems and Technologies as E...Summary of: “A Perspective Vision of Micro/Nano Systems and Technologies as E...
Summary of: “A Perspective Vision of Micro/Nano Systems and Technologies as E...
francescoiancis
 
CONVEGNO DA IRETI 18 giugno 2024 | CASCETTA Furio
CONVEGNO DA IRETI 18 giugno 2024 | CASCETTA FurioCONVEGNO DA IRETI 18 giugno 2024 | CASCETTA Furio
CONVEGNO DA IRETI 18 giugno 2024 | CASCETTA Furio
Servizi a rete
 
CONVEGNO DA IRETI 18 giugno 2024 | BRIOSCHI Benedetta
CONVEGNO DA IRETI 18 giugno 2024 | BRIOSCHI BenedettaCONVEGNO DA IRETI 18 giugno 2024 | BRIOSCHI Benedetta
CONVEGNO DA IRETI 18 giugno 2024 | BRIOSCHI Benedetta
Servizi a rete
 
CONVEGNO DA IRETI 18 giugno 2024 | MONTANARI Alberto
CONVEGNO DA IRETI 18 giugno 2024 | MONTANARI AlbertoCONVEGNO DA IRETI 18 giugno 2024 | MONTANARI Alberto
CONVEGNO DA IRETI 18 giugno 2024 | MONTANARI Alberto
Servizi a rete
 

Recently uploaded (8)

CONVEGNO DA IRETI 18 giugno 2024 | TELLINI Tania
CONVEGNO DA IRETI 18 giugno 2024 | TELLINI TaniaCONVEGNO DA IRETI 18 giugno 2024 | TELLINI Tania
CONVEGNO DA IRETI 18 giugno 2024 | TELLINI Tania
 
CONVEGNO DA IRETI 18 giugno 2024 | GAMBARDELLA Alberto
CONVEGNO DA IRETI 18 giugno 2024 | GAMBARDELLA AlbertoCONVEGNO DA IRETI 18 giugno 2024 | GAMBARDELLA Alberto
CONVEGNO DA IRETI 18 giugno 2024 | GAMBARDELLA Alberto
 
CONVEGNO DA IRETI 18 giugno 2024 | OTTOLINI Stefano
CONVEGNO DA IRETI 18 giugno 2024 | OTTOLINI StefanoCONVEGNO DA IRETI 18 giugno 2024 | OTTOLINI Stefano
CONVEGNO DA IRETI 18 giugno 2024 | OTTOLINI Stefano
 
CONVEGNO DA IRETI 18 giugno 2024 | BARBONE Daniele
CONVEGNO DA IRETI 18 giugno 2024 |  BARBONE DanieleCONVEGNO DA IRETI 18 giugno 2024 |  BARBONE Daniele
CONVEGNO DA IRETI 18 giugno 2024 | BARBONE Daniele
 
Summary of: “A Perspective Vision of Micro/Nano Systems and Technologies as E...
Summary of: “A Perspective Vision of Micro/Nano Systems and Technologies as E...Summary of: “A Perspective Vision of Micro/Nano Systems and Technologies as E...
Summary of: “A Perspective Vision of Micro/Nano Systems and Technologies as E...
 
CONVEGNO DA IRETI 18 giugno 2024 | CASCETTA Furio
CONVEGNO DA IRETI 18 giugno 2024 | CASCETTA FurioCONVEGNO DA IRETI 18 giugno 2024 | CASCETTA Furio
CONVEGNO DA IRETI 18 giugno 2024 | CASCETTA Furio
 
CONVEGNO DA IRETI 18 giugno 2024 | BRIOSCHI Benedetta
CONVEGNO DA IRETI 18 giugno 2024 | BRIOSCHI BenedettaCONVEGNO DA IRETI 18 giugno 2024 | BRIOSCHI Benedetta
CONVEGNO DA IRETI 18 giugno 2024 | BRIOSCHI Benedetta
 
CONVEGNO DA IRETI 18 giugno 2024 | MONTANARI Alberto
CONVEGNO DA IRETI 18 giugno 2024 | MONTANARI AlbertoCONVEGNO DA IRETI 18 giugno 2024 | MONTANARI Alberto
CONVEGNO DA IRETI 18 giugno 2024 | MONTANARI Alberto
 

React Query - gestione efficiente dei dati nelle app React - Updated (Eduard Capanu).pdf

  • 2. Eduard Andrei Capanu Microsoft 365 React JavaScript Frontend Developer & Trainer — React - TypeScript - JavaScript ๏ Computer science lover & sviluppatore software full-time ๏ Ho lavorato per 5 anni con tecnologie Microsoft ๏ Appassionato di JavaScript & React ๏ Condividere e apprendere il piu’ possibile
  • 3. Di cosa parleremo in questo talk? Introduzione della libreria Client VS Server State React Query Examples Features utili Introduzione del software TanStack Non si tratta solo di Data Fetching
  • 4. Introduzione del software TanStack - Non è un framework o una libreria - Si tratta di un set di tecnologie in grado di offrire soluzioni e feature per lo sviluppo con React, Next.JS e TypeScript - Con il tempo si sono espansi offrendo i stessi servizi anche per altre librerie / framework come Angular, Svelte, Rue ecc.
  • 5. Introduzione della libreria - Cos’è React Query? “È una libreria per la gestione asincrona dello stato applicativo” - Spesso confuso con una libreria per il fetching dei dati - Se usi un framework con delle soluzioni di fetching e mutazioni già esistenti, forse non hai bisogno anche di React Query - A primo impatto potrebbe non sembrare allettante, ma vediamo meglio i vantaggi che ci porta Perchè introdurre un’altra libreria per fare delle fetch? Posso usare benissimo fetch + useEffect!
  • 7. Introduzione della libreria - Perché dovresti averne bisogno? Abbiamo quasi 5 bug qui
  • 8. Introduzione della libreria - Perché dovresti averne bisogno? - Persino la documentazione ufficiale di React consiglia di usare un’altra libreria o framework per il data fetching
  • 9. Il primo -> Race Condition Lo stato cambia con ID -> 2 Viene effettuata una fetch per il Todo con ID -> 1, che ci mette troppo a rispondere Il problema è che alla fine la chiamata con ID2 risponde per prima e quella con ID1 per ultima. Quindi lo stato si aggiorna con il risultato della prima chiamata e non dell’ultima. Per cui mostriamo dati sbagliati 1 Bug
  • 10. Il primo -> Race Condition (Soluzione) Viene eseguita quando il ‘todoId’ cambia Se ‘todoId’ cambia, la if della fetch precedente risulterà false e non andremo a settare i dati 1 Bug
  • 11. I secondo -> Il Loading 2 Bug Se vogliamo gestire il loading sulla nostra chiamata dobbiamo creare un nuovo state Implementarlo per gestire il loading ad ogni chiamata E pulirlo ogni volta che la fetch finisce
  • 12. I terzo -> Lo stato vuoto 3 Bug Se vogliamo avere evidenza della differenza tra ‘non ho ancora dati’ e ‘non ho mai avuto dati’, dobbiamo andare a settare lo state di React ad undefined. Cosi, nel caso la risposta ci torni un obj / array vuoto, sapremo che è stata la risposta a non tornarci risultati e che ora lo stato è aggiornato con lo stesso valore del server. Stato undefined
  • 13. I quarto -> Il reset dei Dati e degli Errori 4 Bug - Lo stato che usiamo per i nostri dati e quello che usiamo per gli errori sono separati. - Questo significa che se non facciamo manualmente dei RESET, possiamo andare nella casistica in cui i nostri dati si aggiornano ma rimaniamo con gli errori precedenti mostrati a UI. Dipende da come usiamo l’errore nel JSX, se controlliamo ‘error’ per primo avremo un problema
  • 14. 4 Bug I quarto -> Il reset dei Dati e degli Errori Puliamo gli errori in fase di set dei nuovi dati Puliamo i dati in fase di set degli errori
  • 15. I quinto -> Doppie chiamate in StrictMode 5 Bug - Non un bug vero è proprio ma decisamente una cosa fastidiosa - Il 90% di noi penso faccia uso di <React.StrictMode> - Quando usato, i nostri effect vengono lanciati 2 volte per ‘aiutarci’ a trovare bug come ad esempio la mancanza di funzioni di cleanup negli effect
  • 16. Codice finale di una ‘semplice’ fetch Ma non doveva essere semplice?
  • 17. Conclusione? Il Data Fetching è semplice La Gestione Dello Stato Asincrona non lo è
  • 18. Quello che React Query gestisce per noi - Hai ragione a dire che non vuoi React Query per una cosa come fetchare i dati, perché alla fine anche con essa il codice di fetch lo devi scrivere comunque. - Ma è molto probabile che ti servirà per rendere il tuo stato prevedibile e per la gestione asincrona degli eventi che vanno ad aggiornare lo stato. Prima di vedere il codice con React Query, aggiungiamo queste 2 righe per creare il contesto in cui la libreria possa agire
  • 19. Quello che React Query gestisce per noi Solamente 10 righe di codice per gestire il tutto. PS: Qui ci sta anche un BONUS -> la gestione della throw della fetch
  • 20. Quello che React Query gestisce per noi - Non abbiamo più problemi di Race Condition - Abbiamo il loading, gli data e gli errori inclusi, senza gestioni multiple - Gli stati vuoti vengono gestiti automaticamente e possono essere sovrascritti con ‘placeholderData’ se serve - Non si avranno stati disallineati tra i data e gli errori, almeno che non lo vogliamo - Le fetch multiple sono deduplicate, persino quelle in StrictMode
  • 21. Client VS Server state - Possiamo pensare al Client State come a tutte quelle operazioni sincrone che andiamo a gestire o manipolare - Solo noi possiamo cambiarlo - Viene distrutto quando il browser cambia - Disponibile in modo istantaneo - Sempre aggiornato - Ci riferiamo al Server State quando abbiamo a che fare con dati che non sono nostri, come ad esempio quelli ricevuti da chiamate POST - Vediamo solo una parte dei dati e non sappiamo mai se sono aggiornati al 100% - Controllati da altri servizi / utenti - Sono condivisi per più sessioni di browser - Sono asincroni, ci serve del tempo per prendere i dati dal server e riportarli sul client
  • 22. The Story of React Query The Story of React Query: https:/ /www.youtube.com/watch?v=OrliU0e09io
  • 23. Features utili Caching Automatic refetching Fetch retry Pagination utilities Mutations Optimistic update utilities And more
  • 26. https:/ /eduardcapanu.gumroad.com/l/reacttipsandtriks ๏ react mysteries like the double render explained ๏ features explained (like portals, lazy loading ecc.) ๏ how the life cycle works ๏ common mistakes ๏ what DevTools can do ๏ library under the hood information (prop drilling, high-order components, react canary, Virtual DOM ecc.) ๏ React insights about the version 18 & 19 ๏ some tips that can help you during the interview questions 30+ Free React Tips & Tricks
  • 27. React Query: gestione efficiente dei dati nelle app React Ci vediamo al prossimo talk ☺ @capanu2 @eduardcapanu https:/ /eduardcapanu.com @eduard_capanu_dev