Angular Academy · Lektion

Overførsel af tilstand til klienten

Undgå duplikerede forespørgsler med state transfer.

Lektion 4 af 413 trin

Overførsel af tilstand til klienten er en gratis Angular Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Angular Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Angular Academy-kurset indeholder 4 lektioner i alt.

Problemet med dobbelt hentning

Under SSR henter serveren data for at gengive HTML. Uden hjælp henter klienten de samme data igen efter hydrering, hvilket spilder en forespørgsel og kan give et synligt flimmer i indholdet.

TransferState til undsætning

Angulars TransferState serialiserer data på serveren ind i HTML'en, hvorefter klienten læser dem i stedet for at hente dem igen. Dataene transporteres i et script-tag i svaret.

Sådan transporteres dataene

Tilstand, der er gemt på serveren, indlejres som JSON på siden. Ved opstart deserialiserer klienten den, så den første gengivelse bruger de samme data, som serveren brugte.

<!-- embedded in SSR HTML -->
<script id="ng-state" type="application/json">{"users-1":[...]}</script>

Brug af makeStateKey

Opret en typet nøgle med makeStateKey, og læs eller skriv derefter via tjenesten TransferState.

import { makeStateKey, TransferState } from '@angular/core';

const USERS = makeStateKey<User[]>('users');
const state = inject(TransferState);
state.set(USERS, fetchedUsers);

Mønsteret læs og hent

På både server og klient: Hvis nøglen findes i TransferState, skal du bruge den; ellers skal du hente dataene. Serveren henter og gemmer dem, mens klienten finder den gemte værdi og springer kaldet over.

const state = inject(TransferState);
if (state.hasKey(USERS)) {
  this.users = state.get(USERS, []);
} else {
  this.http.get<User[]>('/api/users')
    .subscribe(u => { this.users = u; state.set(USERS, u); });
}

HttpClient gør det automatisk

Hvis du kalder provideClientHydration(withHttpTransferCacheOptions()) (aktiveret som standard med hydrering), gemmer HttpClient automatisk serverens GET-svar i TransferState, så identiske klientanmodninger leveres fra cachen uden manuelle nøgler.

provideClientHydration(withHttpTransferCacheOptions({ filter: (req) => req.method === 'GET' }))

Undgå flimren

Fordi klienten genbruger overførte data, svarer den hydrerede visning nøjagtigt til serverens HTML, hvilket forhindrer det øjeblik, hvor indholdet forsvinder og indlæses igen.

Sikkerhedsbemærkning

Overført tilstand indlejres i den offentlige HTML. Læg aldrig hemmeligheder, tokens eller private brugerdata, som du ikke ville eksponere i sidens kildekode, i TransferState.

Manuel kontra automatisk

HTTP-overførselscachen dækker automatisk det meste datahentning baseret på GET. Brug manuel makeStateKey til ikke-HTTP-baseret beregnet tilstand, som du vil overføre fra server til klient.

Cacheomfang

HTTP-overførselscachen gælder pr. forespørgsel og bruges én gang på klienten. Når det første matchende klientkald har læst den, går efterfølgende kald normalt ud på netværket.

Bekræft, at det virker

Undersøg SSR-svaret, og se efter det indlejrede tilstandsscript. I browserens netværksfane bør du kunne se, at den dobbelte hentning springes over lige efter hydrering.

Hurtigt tjek

Tjek din viden om overførsel af tilstand.

Opsummering

Du har lært at overføre data fra server til klient med TransferState og makeStateKey, brugt den automatiske HTTP-overførselscache, undgået dobbelt hentning og flimren samt holdt private data ude af den offentligt indlejrede tilstand.

Gratis at komme i gang

Lær HTML 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
38
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “Overførsel af tilstand til klienten” gratis?

Ja — alle 3 lektioner i læringssporet Angular Academy, inklusive “Overførsel af tilstand til klienten”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Angular Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Overførsel af tilstand til klienten”?

Undgå duplikerede forespørgsler med state transfer. Du øver dig i Angular 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å Angular Academy?

Der kræves ingen tidligere erfaring. Angular 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 4 af 4.

Hvor lang tid tager lektionen “Overførsel af tilstand til klienten”?

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 Angular Academy-lektion?

Ja. Alle Angular 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 rendering på serversiden
  2. Opsætning af Angular SSR
  3. Serverruter og renderingstilstande
  4. Overførsel af tilstand til klienten
← Tilbage til Angular Academy