React Academy · Lektion

Bygg ett imperativt komponent-API

Utforma ett fokusstyrt inmatningsfält, en modal med open- och close-metoder samt andra mönster för imperativa komponenter.

Lektion 3 av 412 steg

Bygg ett imperativt komponent-API är en gratis lektion i React Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.

Designa en FocusableInput

Börja med att fastställa kontraktet: en FocusableInput kan exponera focus, blur och getValue. Omslut den med forwardRef, behåll en intern ref till det riktiga input-elementet och returnera de tre metoderna från useImperativeHandle.

Varje metod vidarebefordrar anropet till det underliggande input-elementet, så den överordnade komponenten får exakt de operationer den behöver utan att behöva hantera råelementet direkt.

En VideoPlayer som exponerar play/pause/seekTo

En mediekomponent har stor nytta av ett imperativt API. En VideoPlayer kan exponera play, pause och seekTo, där varje metod vidarebefordrar anropet till de inbyggda metoderna på HTMLVideoElement via en intern videoref.

seekTo tar emot en tid i sekunder och sätter currentTime, vilket ger överordnade komponenter exakt kontroll över uppspelningen – något som skulle vara omständligt att styra enbart via props.

En Carousel som exponerar next/prev/goToSlide

En Carousel kan exponera next, prev och goToSlide så att externa kontroller eller tangentbordshanterare kan styra den. Internt uppdaterar metoderna state för det aktiva indexet, och komponenten renderas om med den nya sliden.

Detta kombinerar imperativa utlösare med deklarativ rendering: den överordnade komponenten begär en övergång, och karusellen renderar resultatet genom sitt vanliga state-flöde.

Dokumentera det imperativa API:t

Ett imperativt handtag är ett offentligt kontrakt, så dokumentera varje metod, dess parametrar och returvärde. Tydlig dokumentation visar API-användarna vad som stöds och motverkar beroenden på odokumenterade interna detaljer.

Behandla handtaget som vilket annat API-gränssnitt som helst: en kort referens med en lista över metoder som play(), pause() och seekTo(seconds) förebygger felaktig användning och förvirring.

Bakåtkompatibilitet när handtag utvecklas

När API-användare väl är beroende av ett handtag innebär det ett breaking change att ta bort eller byta namn på en metod. Lägg till nya metoder i stället för att ändra befintliga signaturer, och fasa ut dem på ett ordnat sätt innan något tas bort.

Om handtaget betraktas som ett versionshanterat API minskar risken att efterföljande kod går sönder när komponenten byggs ut över tid.

Hybrid med imperativa API:er och styrande props

Många verkliga komponenter blandar båda stilarna. En VideoPlayer kan ta emot en src-prop och en autoPlay-prop deklarativt, samtidigt som den exponerar play och seekTo för situationer som props inte kan uttrycka på ett bra sätt.

Riktlinjen är att använda props för state och konfiguration och reservera det imperativa handtaget för engångsåtgärder som utlöses vid specifika tidpunkter.

Testning med act() och ref-callbacks

För att testa ett imperativt API renderar man komponenten med en ref, omsluter interaktionerna i act och anropar de exponerade metoderna via ref.current. Därefter verifierar man det observerbara resultatet, till exempel att videon är pausad eller att slide-indexet har ändrats.

En ref-callback kan fånga handtaget under rendering, så att testet får en stabil referens att anropa metoder på.

Storybook-stories

Storybook är en bra plats för att demonstrera imperativa handtag. En story kan hålla en ref till komponenten och rendera knappar som anropar dess metoder, så att granskare interaktivt kan prova play, pause eller goToSlide.

Dessa stories fungerar även som levande dokumentation och visar exakt hur det imperativa API:t beter sig isolerat.

Verkliga exempel

Imperativa handtag är vanliga när man kapslar in bibliotek som inte är React-bibliotek. Diagrambibliotek exponerar metoder som redraw eller update, kart-SDK:er exponerar panTo och setZoom, och redigerare för formaterad text exponerar insertText eller getContents.

Genom att kapsla in ett sådant bibliotek i en React-komponent och exponera ett rent handtag får resten av applikationen ett tydligt och idiomatiskt sätt att styra det.

Hålla handtaget stabilt

Metoder på ett handtag sluter ofta över aktuellt state. Använd därför beroendearrayen i useImperativeHandle för att uppdatera dem vid behov, och använd useCallback för interna hjälpfunktioner för att undvika inaktuella closures.

Ett välhanterat handtag arbetar alltid med uppdaterade värden, så en överordnad komponent som anropar getValue eller seekTo får ett beteende som stämmer med den senaste renderingen.

Snabbtest: design av ett imperativt API

Tillämpa designriktlinjen för imperativa komponent-API:er.

Sammanfattning: imperativa komponent-API:er

Du designade handtag för en FocusableInput, en VideoPlayer och en Carousel, där varje handtag exponerar ett litet antal åtgärdsmetoder. Dokumentera och versionshantera dessa metoder, eftersom API-användarna är beroende av dem som ett offentligt API.

Kombinera imperativa åtgärder med deklarativa props, testa via ref.current inuti act och visa beteendet i Storybook. Samma mönster kapslar på ett rent sätt in diagram-, kart- och redigeringsbibliotek.

Gratis att börja

Lär dig React med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
88
Lektioner
324

Vanliga frågor

Är lektionen ”Bygg ett imperativt komponent-API” gratis?

Ja – hela texten till ”Bygg ett imperativt komponent-API” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Bygg ett imperativt komponent-API”?

Utforma ett fokusstyrt inmatningsfält, en modal med open- och close-metoder samt andra mönster för imperativa komponenter. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig React Academy?

Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Bygg ett imperativt komponent-API”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här React Academy-lektionen?

Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. forwardRef: exponera DOM-referenser för föräldrar
  2. useImperativeHandle: anpassade instansvärden
  3. Bygg ett imperativt komponent-API
  4. När bör ni använda imperativa respektive deklarativa API:er
← Tillbaka till React Academy