Når du administrerer komplekse tilstande i en Next-applikation, kan tingene hurtigt blive vanskelige. Traditionelle kroge som useState bistand med statsforvaltningen, men præsentere et spørgsmål om propboring. Propboring betyder at sende data eller funktioner ned gennem flere komponenter.
En bedre tilgang ville være at adskille din tilstandsstyringslogik fra komponenterne og opdatere disse tilstande fra hvor som helst i din applikation. Vi vil lede dig igennem, hvordan du bruger Context API, mens vi bygger en simpel opgavelisteapplikation.
Før du starter din opgaveliste
Før du kan bygge opgavelisten-applikationen, skal du bruge:
Grundlæggende kendskab til moderne JavaScript-operatører og Reacts useState hook.
En forståelse af, hvordan man destrukturere arrays og objekter i JavaScript.
Node v16.8 eller nyere installeret på din lokale maskine og kendskab til pakkeadministratorer som npm eller garn.
Du kan finde det færdige projekt på GitHub til reference og yderligere udforskning.
Ansøgningstilstand refererer til den aktuelle tilstand for en applikation på et givet tidspunkt. Dette inkluderer information, som appen kender og administrerer, såsom brugerinput og data hentet fra en database eller en API (Application Programming Interface).
For at forstå applikationstilstanden skal du overveje de mulige tilstande for en simpel modapplikation. De omfatter:
Standardtilstanden når tælleren er på nul.
En øget tilstand når tælleren øges med én.
En nedsat tilstand når tælleren reduceres med én.
En nulstillingstilstand når tælleren vender tilbage til sin standardtilstand.
En React-komponent kan abonnere på ændringer i tilstanden. Når en bruger interagerer med en sådan komponent, kan deres handlinger – såsom knapklik – administrere opdateringer til tilstanden.
Dette uddrag viser en simpel tællerapplikation i standardtilstand, der administrerer tilstand baseret på klikhandlinger:
konst [tæller, sætTæller] = useState(0);
Vend tilbage (
{tæller}</h1>
Opsætning og installation
Projektets repository indeholder to grene: forret og sammenhæng. Du kan bruge startgrenen som en base til at bygge projektet ud fra eller kontekstgrenen til at få vist den endelige demo.
Kloning af Starter-appen
Startappen giver den brugergrænseflade, du skal bruge til den endelige app, så du kan fokusere på implementeringen af kernelogikken. Åbn en terminal og kør følgende kommando for at klone startgrenen af depotet til din lokale maskine:
Kør følgende kommando i projektbiblioteket for at installere afhængighederne og starte din udviklingsserver:
garn && garn dev
Eller:
npm i && npm køre dev
Hvis alt gik godt, skulle brugergrænsefladen blive vist i din browser:
Implementering af logikken
Context API'en giver mulighed for at administrere og dele tilstandsdata på tværs af komponenter uden behov for manuel propboring.
Trin 1: Opret og eksporter kontekst
Lave en src/app/kontekst mappe for at gemme kontekstfilen og holde projektmappen velorganiseret. I denne mappe skal du oprette en todo.context.jsx fil, der vil indeholde al kontekstlogik for applikationen.
Importer skabekontekst funktion fra reagere bibliotek og kald det, gemmer resultatet i en variabel:
Lige før Vend tilbage erklæring, oprette en håndtereTodoInput funktion, der kører, når brugeren indtaster en opgave. Denne funktion opdaterer derefter opgave stat.
Tilføj en opretteTask funktion, der kører, når en bruger sender en opgave. Denne funktion opdaterer opgaver tilstand og tildeler den nye opgave et tilfældigt ID.
Nu du har oprettet tilstandene og skrevet kode til at administrere dem, skal du gøre disse tilstande og håndteringsfunktioner tilgængelige for Udbyder. Du kan levere dem i form af et objekt ved hjælp af værdi ejendom af Udbyder komponent.
Vend tilbage ( værdi={{ opgave, opgaver, handleTodoInput, oprette opgave, updateTask, slet opgave, }} > {børn} </TodoContext.Provider> );
Trin 4: Omfang konteksten
Det Udbyder du har oprettet, skal ombryde komponenten på øverste niveau for at gøre konteksten tilgængelig for hele applikationen. For at gøre dette, rediger src/app/page.jsx og pakk ind Todos komponent med TodoContextProvider komponent:
; </TodoContextProvider>;
Trin 5: Brug konteksten i komponenter
Rediger din src/app/components/Todos.jsx fil og destruktur opgaver, opgave, håndtereTodoInput, og opretteTask via et opkald til brug TodoContext fungere.
Opdater nu formularelementet for at håndtere indsendelseshændelsen og ændringer i hovedindtastningsfeltet:
Trin 6: Gengiv opgaver i brugergrænsefladen
Du kan nu bruge appen til at oprette og tilføje en opgave til opgaver liste. For at opdatere skærmen skal du kortlægge eksisterende opgaver og gengive dem i brugergrænsefladen. Først skal du oprette en src/app/components/Todo.jsx komponent til at indeholde en enkelt opgave.
Indenfor src/app/components/Todo.jsx komponent, rediger eller slet en opgave ved at aktivere opdatereTask og sletOpgave funktioner, vi har oprettet i src/app/context/todo.context.jsx fil.
At gengive src/app/components/Todo.jsx komponent for hver opgave, gå ind i src/app/components/Todos.jsx fil og betinget kort gennem opgaver lige efter header afsluttende tag.
Test din applikation i en browser og bekræft, at den giver det forventede resultat.
Lagring af opgaver i lokalt lager
I øjeblikket vil opdatering af siden nulstille opgaverne, hvilket vil kassere alle, du har oprettet. En måde at løse dette problem på er ved at gemme opgaverne i browserens lokale lager.
Web storage API er en forbedring af cookie-lagring med funktioner, der forbedrer oplevelsen for både brugere og udviklere.