Jetpack Compose Academy · Lezione

derivedStateOf e snapshotFlow

Calcoli e osservi lo stato derivato in modo efficiente.

Lezione 4 di 413 passaggi

derivedStateOf e snapshotFlow è una lezione Jetpack Compose Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Jetpack Compose Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Jetpack Compose Academy include 4 lezioni in totale.

Calcolare valori dallo stato

A volte un valore dipende da un altro stato, ad esempio un pulsante abilitato solo quando un modulo è valido. Calcolarlo correttamente evita una recomposition inutile.

Ecco derivedStateOf

Un derivedStateOf crea uno stato a partire da un calcolo. Notifica i lettori solo quando il risultato calcolato cambia davvero, non a ogni modifica degli input.

val isValid by remember {
    derivedStateOf { name.isNotBlank() && age > 0 }
}

Filtra il rumore

Se molte letture dello stato alimentano un valore booleano, derivedStateOf ricalcola spesso il risultato, ma lo emette solo quando il booleano cambia. L'interfaccia viene ridisegnata molto meno.

Un esempio con lo scorrimento

Mostrare un pulsante per tornare in cima solo dopo aver superato l'elemento 5 è perfetto per derivedStateOf, perché l'indice cambia continuamente.

val showButton by remember {
    derivedStateOf { listState.firstVisibleItemIndex > 5 }
}

Ricordatevi sempre di usare remember

Avvolgete derivedStateOf in remember affinché lo stato derivato sopravviva alla ricomposizione. Senza remember lo ricreereste a ogni ridisegno.

Ecco snapshotFlow

Uno snapshotFlow trasforma lo stato Compose in un Kotlin Flow. Lo raccogliete all'interno di un effetto per reagire ai cambiamenti dello stato al di fuori della composizione.

snapshotFlow { listState.firstVisibleItemIndex }
    .collect { index -> log(index) }

Eseguitelo in LaunchedEffect

Poiché la raccolta è un'operazione sospendibile, inserite snapshotFlow in un LaunchedEffect. In questo modo collegate lo stato Compose alle operazioni basate sulle coroutine.

LaunchedEffect(listState) {
    snapshotFlow { listState.firstVisibleItemIndex }
        .collect { save(it) }
}

Combinare gli operatori di Flow

Poiché è un vero Flow, potete concatenare operatori come distinctUntilChanged o debounce per controllare la frequenza delle reazioni.

snapshotFlow { query }
    .debounce(300)
    .collect { search(it) }

derivedStateOf e snapshotFlow

Usate derivedStateOf per fornire all'interfaccia un valore calcolato e snapshotFlow per inviare i cambiamenti dello stato agli effetti collaterali, ad esempio per registrare o salvare dati.

Evitate i ricalcoli ingenui

Leggere direttamente lo stato dello scorrimento nel corpo causa una ricomposizione a ogni fotogramma. derivedStateOf limita i ridisegni ai casi in cui cambia il risultato significativo.

Entrambi rendono efficienti le interfacce

Insieme, questi strumenti mantengono veloce Compose: derivedStateOf riduce la ricomposizione e snapshotFlow sposta le reazioni fuori dal percorso della composizione.

Controllo rapido

Ricordate per cosa è ottimizzato ciascuno strumento.

Riepilogo: derivedStateOf e snapshotFlow

Ottimo! derivedStateOf calcola valori efficienti per l'interfaccia ed emette notifiche solo quando si verifica un cambiamento reale, mentre snapshotFlow trasmette lo stato Compose alle coroutine. ⚡

Gratis per iniziare

Impara Kotlin con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
30
Lezioni
120

Domande Frequenti

La lezione «derivedStateOf e snapshotFlow» è gratuita?

Sì — il testo completo di «derivedStateOf e snapshotFlow» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Jetpack Compose Academy, passa a CoddyKit PRO. Il corso Jetpack Compose Academy include 4 lezioni in totale.

Cosa imparerò in «derivedStateOf e snapshotFlow»?

Calcoli e osservi lo stato derivato in modo efficiente. Eserciti Jetpack Compose Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Jetpack Compose Academy?

Non è richiesta alcuna esperienza precedente. Jetpack Compose Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «derivedStateOf e snapshotFlow»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Jetpack Compose Academy?

Sì. Ogni lezione Jetpack Compose Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. LaunchedEffect per le coroutine
  2. rememberCoroutineScope per gli eventi
  3. DisposableEffect e pulizia
  4. derivedStateOf e snapshotFlow
← Torna a Jetpack Compose Academy