11/08/2023 - paololetto ha scritto:
“non troverai le informazioni che ti aspetti” , ma quando posso essere sicuro che i dati scaricati dal server mysql sono completi edi conseguenza eseguire una elaborazione su di essi?
Il problema non è la “sicurezza” di ricevere i dati, ma il fatto che la funzione loadData() è asincrona: vuol dire che, se non vengono generati errori, i dati sono ricevuti correttamente, ma in quanto asincrona tutto ciò che fa è “iniziare” l'operazione e restituire una Promise (hai visto il link?), cioè un oggetto che rappresenta l'operazione in corso di scaricamento dei dati.
Leggi questo articolo che spiega bene qual è il principio di funzionamento e come gestirle.
11/08/2023 - paololetto ha scritto:
Inserendo varie console.log ho visto che l'esecuzione del listato che inizia da const boxMedici=[] salta useffect giunge fino alla fine delle istruzioni contenute in {form===1 …} ritorna direttamente ad useffect , esegue la funzione loadata() e riparte dall'inizio -const boxMedici=[]- fino alla fine del {Form===1 … } saltando nuovamente useffect .A me sembra un comportamento strano ,è vero che useffect deve essere eseguito una sola volta, ma perchè non eseguirlo alla prima discesa ? Perdona la mia poca conoscenza , ma non ho mai avuto a che fare con il rendering.
Mi sono un po' perso nella spiegazione, ma ad ogni modo credo si possa riassumere tutto così: la funzione che scrivi e che rappresenta il componente ha il compito di restituire gli oggetti della libreria React che descrivono l'interfaccia da mostrare, quindi ogni cosa che metti in quella funzione viene eseguita ogni volta che la libreria ha bisogno di fare il rendering; è quindi ovvio che se tu fai il rendering di un array vuoto e poi scarichi i dati, quando li vai a memorizzare nello stato React sa che deve fare nuovamente il rendering del componente, quindi va a eseguire la tua funzione, la quale richiede i dati e li aggiorna nello stato, quindi scatena ancora il rendering che avvia di nuovo il download dei dati, che aggiornano lo stato e fanno ripartire il rendering, ecc. ecc.
L'uso di useEffect() serve a indicare nella funzione un callback (la funzione che scrivi tu) che va passata alla libreria React ed eseguita una volta sola.
Non puoi fare il rendering avendo già i dati presi dal server, perché questo presupporrebbe il blocco del rendering stesso in attesa che i dati vengano scaricati, e in caso di lentezza del server potrebbero metterci anche molto tempo, bloccando di fatto l'applicazione.
Taglio corto perché la spiegazione potrebbe essere lunga, e anche inefficace poiché in realtà quello che dovrei dire è che, sviluppando in React, prima di cimentarsi nella creazione di una app di una certa complessità, occorre studiare la libreria. Se si parte in quarta senza approfondire né JavaScript né i principi base di funzionamento della libreria, allora i problemi fastidiosi e senza spiegazione legati a una codifica errata del programma sono dietro l'angolo e richiederanno un tempo indefinito per la risoluzione, ammesso che a forza di incastrare cose “a sentimento” non si arrivi a un punto di non ritorno.
Come per ogni disciplina, prima di svolgere un compito o usare uno strumento, bisogna studiarlo: non c'è scorciatoia. :)