Ho il seguente problema. Ho un'applicazione reattiva che deve caricare una griglia di singole immagini di dimensioni ridotte, fino a poche centinaia (si pensi a una griglia 20x20 in cui ogni cella è un'immagine 100x100). C'è anche una combobox in cui posso scegliere diverse opzioni di selezione, e ogni opzione dovrà mostrare un diverso set di immagini nella matrice.
In questo momento, quello che faccio è avere un componente che reagisce all'attuale puntello con gli ID immagine e crea un tag <img src>
con l'URL corretto. Funziona, ma ha alcuni problemi.
Un problema è che il recupero dell'immagine, per ragioni che non approfondirò, è lento e rimarrà lento. Può richiedere fino a un minuto per ottenere tutte le immagini, e questo è previsto.
Il problema è che con la disposizione attuale, succede quanto segue:
- non appena il componente per la griglia viene passato un elenco di ID immagine, i tag img vengono aggiunti e viene generata una serie di richieste asincrone per ciascuno dei tag. Questo può richiedere del tempo per essere completato e non può essere interrotto.
- quando cambio la casella combinata (potenzialmente con l'operazione sopra non ancora completata), il componente prop che tiene la lista di id cambia, ogni tag
<img src>
viene modificato reagendo, questo genera un nuovo async recupero della nuova serie di immagini .
Il risultato finale è che questo non solo accumula richieste, ma finisce anche per creare una strana situazione in cui la griglia mostra una miscela di vecchie e nuove immagini.
Ho il controllo sia del server che del client. A condizione che il recupero delle immagini sia lento, mi chiedo se ci siano strategie migliori per:
- ridurre e controllare la quantità di richieste asincrone che eseguiamo per recuperare le immagini, o cancellarle o risolvere questo problema in un modo diverso.
- reagiscono, se c'è un modo per cancellare le celle quando gli oggetti cambiano da una lista di immagini all'altra, in modo che le celle vengano svuotate e io non finisca con una miscela di vecchie e nuove immagini. React vede il cambiamento da una lista all'altra e genera il nuovo stato, ma ho bisogno di generare uno stato intermedio in cui i tag
<img>
vengono rimossi, altrimenti la vecchia immagine rimane finché non viene recuperata la nuova.