React Academy · Lektion

forwardRef: Eksponering af DOM-referencer for forældre

Lær, hvordan forwardRef giver parent-komponenter adgang til en child-komponents DOM-node eller komponentinstans.

Lektion 1 af 413 trin

forwardRef: Eksponering af DOM-referencer for forældre er en gratis React Academy-lektion på CoddyKit. Dette er lektion 1 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 React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.

Hvad refs er, og standardbegrænsningen

En ref er en måde at holde en reference til en DOM-node eller komponentinstans på, som bevares mellem gengivelser uden at udløse nye gengivelser. Du knytter en ref til med attributten ref, og React udfylder dens current-egenskab, efter at ændringerne er lagt i DOM'en.

Ulempen er, at du ikke kan knytte en ref til en funktionskomponent på samme måde som til en div. Som standard har en forælder ingen måde at nå den DOM-node, der ligger inde i en underkomponent, fordi refs ikke videresendes som almindelige props.

forwardRef indpakker en komponent

React.forwardRef lader en komponent modtage en ref fra sin forælder og videresende den til et af sine egne elementer. Den indpakker din komponentfunktion og ændrer funktionssignaturen, så ref kommer ind som et andet argument sammen med props.

Dette er den officielle udvej til at eksponere en indre DOM-node for en kaldende komponent og gøre en ellers uigennemsigtig underkomponent til en komponent, hvis element forælderen kan referere direkte til.

Signaturen for forwardRef

Den indpakkede funktion tager to parametre: (props, ref). Det første er det sædvanlige props-objekt, og det andet er den videresendte ref. Derefter spreder eller knytter du denne ref til det element, du vil eksponere, f.eks. ref={ref} på et indre inputfelt.

Husk, at kun komponenter, der er indpakket med forwardRef, modtager dette andet argument. En almindelig funktionskomponent, der angiver ref som andet parameter, modtager blot undefined.

Anvendelse: Sådan fokuserer forælderen et barns inputfelt

Det klassiske eksempel er en genanvendelig tekstfeltkomponent, hvis indre inputfelt du vil lade en forælder fokusere. Ved at indpakke feltet i forwardRef og knytte den videresendte ref til det underliggende inputelement kan forælderen kalde focus direkte på det.

Det holder feltkomponenten genanvendelig, samtidig med at der gives kontrolleret imperativ adgang præcis dér, hvor det er nødvendigt, f.eks. når det første felt i en formular skal fokuseres ved montering.

Måling af et element i en underkomponent

Videresendte refs muliggør også måling. En forælder kan aflæse offsetWidth og offsetHeight eller kalde getBoundingClientRect på et underkomponentelement, som den har modtaget gennem forwardRef.

Det er nyttigt til værktøjstip, pop op-paneler og layoutberegninger, hvor forælderen skal kende den nøjagtige gengivne størrelse eller placering af et indre element, før den beslutter, hvordan noget skal placeres i forhold til det.

Kald af rullemetoder

Fordi den videresendte ref peger på en ægte DOM-node, kan forælderen kalde indbyggede DOM-metoder på den. Et kald til scrollIntoView på et videresendt listeelement bringer det jævnt ind i synsfeltet, og scrollTo på en videresendt rullebeholder flytter dens indhold.

Det er imperative handlinger, som ikke har en ren deklarativ ækvivalent, og det er netop den slags interaktion, refs er beregnet til at håndtere.

Videresendelse af en ref gennem flere lag

Nogle gange ligger det element, du vil eksponere, flere komponenter nede. Du kan kæde forwardRef sammen, så hvert mellemliggende lag videresender den ref, det modtager, til det næste lag, indtil den til sidst lander på den ønskede DOM-node.

Hver indpakning i kæden skal selv bruge forwardRef og sende ref videre, fordi en almindelig komponent i midten ville bryde forbindelsen.

Komposition af forwardRef og memo

forwardRef og React.memo kan kombineres for at få både ref-videresendelse og memoisering af gengivelsen. Den sædvanlige rækkefølge er memo(forwardRef(Component)), hvor resultatet fra forwardRef indpakkes, så memo-sammenligningen stadig anvendes.

Dette mønster forekommer i ydeevnefølsomme designsystemer, hvor en komponent, der gengives ofte, både skal eksponere sin node og undgå unødvendige gengivelser.

Visning af forwardRef i DevTools

I React DevTools vises en forwardRef-komponent med etiketten ForwardRef omkring komponentens navn. Det gør det nemt med et hurtigt blik at bekræfte, at en komponent deltager i ref-videresendelse.

Du kan give den indre funktion et navn eller angive et displayName for at gøre posten i DevTools tydeligere end en generisk anonym ForwardRef-etiket.

Hvornår du IKKE skal bruge forwardRef

forwardRef bruges til at eksponere DOM-noder og imperative håndtag, ikke til at videregive data. Hvis en forælder skal påvirke en underkomponent, bør du foretrække almindelige props og state frem for at trænge ind gennem en ref.

Overdreven brug af refs kobler komponenter tæt sammen og omgår Reacts dataflow, så adfærden bliver sværere at følge. Brug kun forwardRef, når en deklarativ prop reelt ikke kan udtrykke interaktionen.

forwardRef i moderne React

forwardRef er fortsat det almindelige værktøj til at eksponere refs i komponentbiblioteker og genanvendelige inputfelter. Nyere React-versioner bevæger sig i retning af at lade ref blive videregivet som en almindelig prop, men forwardRef bruges stadig bredt og er vigtig at forstå.

Et godt kendskab til den forbereder dig både på eksisterende kodebaser og på de underliggende mekanismer, som enhver fremtidig syntaks med ref som prop bygger på.

Hurtig kontrol: Signaturen for forwardRef

Kontrollér din forståelse af, hvordan en forwardRef-komponent modtager sin ref.

Opsummering: forwardRef

forwardRef løser begrænsningen, hvor en forælder ikke kan nå en underkomponents DOM-node, ved at give komponenten et ekstra ref-argument, som den kan videresende til et indre element. Det muliggør fokusering, måling og rulning af elementer i underkomponenter.

Den kan kombineres med memo, kædes gennem flere lag og vises som ForwardRef i DevTools. Brug den til imperativ DOM-adgang, ikke til at videregive data, som props håndterer bedre.

Gratis at komme i gang

Lær React 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
88
Lektioner
324

Ofte stillede spørgsmål

Er lektionen “forwardRef: Eksponering af DOM-referencer for forældre” gratis?

Ja — hele teksten til “forwardRef: Eksponering af DOM-referencer for forældre” 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 React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “forwardRef: Eksponering af DOM-referencer for forældre”?

Lær, hvordan forwardRef giver parent-komponenter adgang til en child-komponents DOM-node eller komponentinstans. Du øver dig i React 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å React Academy?

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

Hvor lang tid tager lektionen “forwardRef: Eksponering af DOM-referencer for forældre”?

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

Ja. Alle React 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. forwardRef: Eksponering af DOM-referencer for forældre
  2. useImperativeHandle: Tilpassede instansværdier
  3. Opbygning af et imperativt komponent-API
  4. Hvornår skal imperative kontra deklarative API'er bruges
← Tilbage til React Academy