Jetpack Compose Academy · Lektion

viewModel() i en Composable

Hent og afgræns en ViewModel korrekt.

Lektion 2 af 413 trin

viewModel() i en Composable er en gratis Jetpack Compose Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Jetpack Compose Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Jetpack Compose Academy-kurset indeholder 4 lektioner i alt.

Hentning af en ViewModel

Inde i en Composable-funktion opretter du ikke en ViewModel med new. I stedet kalder du funktionen viewModel() for at hente den rigtige instans.

val vm: CounterViewModel = viewModel()

Hvor den kommer fra

Hjælpefunktionen viewModel() finder den nærmeste livscyklusejer og returnerer den ViewModel, der er afgrænset til den. Den opretter kun en, hvis der endnu ikke findes en.

Samme instans ved rekombination

Rekombination kører din funktion mange gange, men viewModel() returnerer den samme instans hver gang, så din tilstand aldrig nulstilles uventet.

Læsning af tilstand fra den

Når du har ViewModel, læser du dens observerbare tilstand, og din Composable-funktion tegnes igen, hver gang tilstanden ændres. Brugergrænsefladen følger dataene. 🔗

val vm: CounterViewModel = viewModel()
Text("Count: " + vm.count)

Kald af dens funktioner

Send brugerhandlinger til ViewModel ved at kalde dens funktioner fra hændelseslambdaer, så beslutningslogikken holdes ude af din Composable-funktion.

Button(onClick = { vm.increment() }) {
    Text("Add")
}

Importen

Funktionen kommer fra Compose-artefaktet til livscyklus. Importér androidx.lifecycle.viewmodel.compose.viewModel for at bruge den.

import androidx.lifecycle.viewmodel.compose.viewModel

Afgrænsning som standard

Som standard er ViewModel afgrænset til værts-Activity'en eller navigationsdestinationen, så alle Composable-funktioner i området deler én instans. 🎯

Konstruktørargumenter

Har du brug for at sende afhængigheder ind? Angiv en factory, så rammeværket ved, hvordan det skal opbygge en ViewModel med konstruktørparametre.

val vm: CartViewModel = viewModel(factory = CartFactory(repo))

Ophæv, send ikke ned

Kald viewModel() højt oppe, tæt på skærmens rod, og send derefter almindelig tilstand og tilbagekald ned, så underordnede Composable-funktioner kan genbruges.

Design, der fungerer i forhåndsvisning

Da viewModel() kræver en rigtig ejer, skal du designe underordnede komponenter til at modtage simple parametre, så de stadig kan gengives i en isoleret @Preview.

Et hurtigt mønster

Det almindelige flow er enkelt: Hent ViewModel, læs dens tilstand, og videresend hændelser til dens funktioner. Tre trin på hver skærm. ✨

Hurtigt tjek

Se, hvordan du henter en ViewModel fra en Composable-funktion.

Opsummering

Kald viewModel() for at hente en afgrænset ViewModel, læs dens tilstand for at styre brugergrænsefladen, og videresend brugerhændelser til dens funktioner i stedet for selv at oprette den.

Gratis at komme i gang

Lær Kotlin med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “viewModel() i en Composable” gratis?

Ja — hele teksten til “viewModel() i en Composable” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Jetpack Compose Academy-kurset, skal du opgradere til CoddyKit PRO. Jetpack Compose Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “viewModel() i en Composable”?

Hent og afgræns en ViewModel korrekt. Du øver dig i Jetpack Compose Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Jetpack Compose Academy?

Der kræves ingen tidligere erfaring. Jetpack Compose Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “viewModel() i en Composable”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Jetpack Compose Academy-lektion?

Ja. Alle Jetpack Compose Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Hvorfor ViewModel overlever rotation
  2. viewModel() i en Composable
  3. Modellering af en UiState-dataklasse
  4. collectAsStateWithLifecycle
← Tilbage til Jetpack Compose Academy