React Academy · leksjon

useImperativeHandle: Tilpassede instansverdier

Bruk useImperativeHandle til å styre nøyaktig hva en overordnet komponent ser når den har en ref til komponenten.

Leksjon 2 av 412 trinn

useImperativeHandle: Tilpassede instansverdier er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.

Den standardvideresendte ref-en

Når en ref videresendes direkte til et DOM-element, mottar forelderen den rå DOM-noden og får tilgang til alle innebygde metoder og egenskaper. Det er ofte et større API-omfang enn man ønsker å eksponere.

Noen ganger er det bedre å gi forelderen et lite, nøye utvalgt objekt i stedet for hele DOM-noden, slik at komponentens offentlige API holdes bevisst avgrenset.

useImperativeHandle erstatter ref-verdien

useImperativeHandle lar man tilpasse verdien som foreldrens ref peker på. I stedet for DOM-noden mottar forelderen objektet som returneres, slik at man bestemmer nøyaktig hvilke metoder og verdier som eksponeres.

Dermed blir den videresendte ref-en et definert imperativt grensesnitt i stedet for en lekkende videresending til det underliggende elementet.

Hook-signaturen

Hooken tar den videresendte ref-en som første argument og en fabrikkfunksjon som andre argument. Fabrikkfunksjonen returnerer handle-objektet som blir ref.current hos forelderen.

Den kalles som useImperativeHandle(ref, () => ({ ... })), der man bygger objektet med metodene og verdiene som skal gjøres tilgjengelige fra fabrikkfunksjonen.

Eksponere bare focus() og clear()

Et vanlig mønster er et egendefinert input-element som bare eksponerer focus og clear. I fabrikkfunksjonen returneres et objekt med disse to metodene, som begge opererer på en intern ref til det ekte input-elementet.

Forelderen kan nå fokusere eller tømme feltet, men kan ikke lese det rå value-attributtet eller utløse vilkårlig DOM-atferd. Dermed blir bruken forutsigbar.

Eksponere open() og close() i en Modal

Imperative handles passer godt for dialoger. En Modal-komponent kan eksponere metodene open og close, som endrer komponentens interne synlighetsstatus, slik at en forelder kan styre den imperativt uten selv å håndtere den boolske verdien open.

Dette er praktisk for kode som må utløse en dialog fra mange steder, for eksempel for å vise en bekreftelse etter at en asynkron handling er fullført.

Å begrense API-omfanget er god design

Ved å returnere bare metodene som skal støttes, oppretter man en tydelig kontrakt. Forbrukere er avhengige av et lite, dokumentert sett med operasjoner i stedet for det omfattende DOM-API-et, noe som gjør fremtidige omstruktureringer tryggere.

Et avgrenset imperativt API er enklere å teste og forstå, og det er langt mindre sannsynlig at det bryter sammen når den interne implementasjonen endres.

Avhengighetsarrayet

useImperativeHandle tar imot et valgfritt tredje argument, et avhengighetsarray. Når en avhengighet endres, kjøres fabrikkfunksjonen på nytt og handle-objektet opprettes på nytt, på samme måte som med useMemo og useEffect.

Hvis metodene som eksponeres, lukker over verdier som kan endres, må disse verdiene oppgis som avhengigheter slik at forelderen alltid mottar et handle-objekt som er knyttet til gjeldende state.

Alltid sammen med forwardRef

useImperativeHandle gir bare mening inne i en komponent som er omsluttet av forwardRef, fordi den trenger den videresendte ref-en for å koble det egendefinerte handle-objektet til. Uten dette ville det ikke finnes noen ref fra forelderen å fylle ut.

De to brukes derfor sammen: forwardRef tar imot ref-en, og useImperativeHandle definerer hva ref-en til slutt peker på.

Teste imperative handles

For å teste et handle-objekt rendere man komponenten med en ref, kaller metodene gjennom ref.current inne i en act-blokk og kontrollerer den resulterende atferden eller DOM-endringene.

Fordi det eksponerte API-et er lite og tydelig, blir disse testene fokuserte. De bekrefter at hver dokumenterte metode gjør det kontrakten lover, i stedet for å undersøke interne detaljer.

TypeScript-typing av handle-objektet

I TypeScript definerer man et interface som beskriver handle-objektet, for eksempel ett med metodene focus og clear, og bruker det til å type både det generiske typeargumentet til forwardRef og ref-en forelderen har.

Dette gir autofullføring og kompileringstidskontroller på kallestedet, slik at forbrukere ser nøyaktig hvilke metoder som finnes, og feil bruk oppdages før kjøring.

Kort kontroll: formålet med useImperativeHandle

Avklar hva useImperativeHandle faktisk brukes til.

Oppsummering: useImperativeHandle

useImperativeHandle tilpasser det en videresendt ref eksponerer, ved å ta imot ref-en og en fabrikkfunksjon som returnerer et handle-objekt. Det brukes til å eksponere et lite API som focus og clear, eller open og close på en modal.

Det brukes alltid sammen med forwardRef, støtter et avhengighetsarray for å oppdatere handle-objektet og passer godt sammen med TypeScript-interfacer og fokuserte tester. Et begrenset API-omfang er et bevisst valg og god design.

Gratis å komme i gang

Lær deg React med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
88
Leksjoner
324

Ofte stilte spørsmål

Er leksjonen «useImperativeHandle: Tilpassede instansverdier» gratis?

Ja – hele teksten i «useImperativeHandle: Tilpassede instansverdier» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «useImperativeHandle: Tilpassede instansverdier»?

Bruk useImperativeHandle til å styre nøyaktig hva en overordnet komponent ser når den har en ref til komponenten. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med React Academy?

Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «useImperativeHandle: Tilpassede instansverdier»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?

Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. forwardRef: Gjør DOM-referanser tilgjengelige for foreldre
  2. useImperativeHandle: Tilpassede instansverdier
  3. Bygg et imperativt komponent-API
  4. Når bør De bruke imperative kontra deklarative API-er
← Tilbake til React Academy