När du hanterar komplexa tillstånd i en Next-applikation kan saker snabbt bli knepiga. Traditionella krokar som useState stöd med statlig ledning men presentera en fråga om propellborrning. Stödborrning innebär att skicka data eller funktioner ner genom flera komponenter.
Ett bättre tillvägagångssätt skulle vara att separera din tillståndshanteringslogik från komponenterna och uppdatera dessa tillstånd var som helst i din applikation. Vi går igenom hur du använder Context API när vi bygger en enkel att göra-lista-applikation.
Innan du börjar din att-göra-lista
Innan du kan bygga att-göra-listan behöver du:
Grundläggande kunskap om moderna JavaScript-operatörer och Reacts useState-krok.
En förståelse för hur man destrukturera arrayer och objekt i JavaScript.
Nod v16.8 eller senare installerad på din lokala dator och bekantskap med pakethanterare som npm eller garn.
Du hittar det färdiga projektet på GitHub för referens och vidare utforskning.
Förstå applikationstillstånd och hantering
Applikationsstatus avser det aktuella tillståndet för en applikation vid en given tidpunkt. Detta inkluderar information som appen känner till och hanterar, såsom användarinmatning och data hämtade från en databas eller ett API (Application Programming Interface).
För att förstå tillämpningens tillstånd, överväg de möjliga tillstånden för en enkel motapplikation. De inkluderar:
Standardtillståndet när räknaren står på noll.
Ett ökat tillstånd när räknaren ökar med ett.
Ett minskat tillstånd när räknaren minskar med ett.
Ett återställningstillstånd när räknaren återgår till standardläge.
En React-komponent kan prenumerera på förändringar i tillstånd. När en användare interagerar med en sådan komponent kan deras åtgärder – som knappklickningar – hantera uppdateringar av tillståndet.
Det här utdraget visar ett enkelt motprogram, i dess standardläge, som hanterar tillstånd baserat på klickåtgärder:
konst [räknare, setCounter] = useState(0);
lämna tillbaka (
{counter}</h1>
Installation och installation
Projektets arkiv innehåller två grenar: förrätt och sammanhang. Du kan använda startgrenen som bas för att bygga projektet från eller kontextgrenen för att förhandsgranska den slutliga demon.
Kloning av Starter-appen
Startappen tillhandahåller det användargränssnitt du behöver för den slutliga appen, så att du kan fokusera på implementeringen av kärnlogiken. Öppna en terminal och kör följande kommando för att klona startgrenen av förvaret till din lokala dator:
Kör följande kommando, i projektkatalogen, för att installera beroenden och starta din utvecklingsserver:
garn && garn dev
Eller:
npm i && npm kör dev
Om allt gick bra bör användargränssnittet visas i din webbläsare:
Implementering av logiken
Context API ger ett sätt att hantera och dela tillståndsdata mellan komponenter, utan att behöva manuell propborrning.
Steg 1: Skapa och exportera sammanhang
Skapa en src/app/context mapp för att lagra kontextfilen och hålla projektkatalogen välorganiserad. I den här mappen skapar du en todo.context.jsx fil som kommer att innehålla all kontextlogik för applikationen.
Importera skapaKontext funktion från reagera bibliotek och kalla det, lagra resultatet i en variabel:
Strax före lämna tillbaka uttalande, skapa ett hantera TodoInput funktion som körs när användaren skriver in en att göra. Denna funktion uppdaterar sedan uppgift stat.
Lägg till en skapaTask funktion som körs när en användare skickar en att göra. Denna funktion uppdaterar uppgifter och tilldelar den nya uppgiften ett slumpmässigt ID.
Steg 3: Lägg till stater och hanterare till leverantören
Nu du har skapat tillstånden och skrivit kod för att hantera dem, måste du göra dessa tillstånd och hanterarfunktioner tillgängliga för Leverantör. Du kan tillhandahålla dem i form av ett objekt med hjälp av värde egendom av Leverantör komponent.
De Leverantör du har skapat måste omsluta toppnivåkomponenten för att göra sammanhanget tillgängligt för hela programmet. För att göra detta, redigera src/app/page.jsx och linda in Todos komponent med TodoContextProvider komponent:
; </TodoContextProvider>;
Steg 5: Använd kontexten i komponenter
Redigera din src/app/components/Todos.jsx fil och destrukturera uppgifter, uppgift, hantera TodoInput, och skapaTask via ett samtal till använd TodoContext fungera.
Uppdatera nu formulärelementet för att hantera inlämningshändelsen och ändringar i huvudinmatningsfältet:
Steg 6: Rendera uppgifter i användargränssnittet
Du kan nu använda appen för att skapa och lägga till en uppgift till uppgifter lista. För att uppdatera displayen måste du kartlägga befintliga uppgifter och återge dem i användargränssnittet. Skapa först en src/app/components/Todo.jsx komponent för att hålla ett enda att göra-objekt.
Inom src/app/components/Todo.jsx komponent, redigera eller ta bort en uppgift genom att anropa uppdateraTask och radera Task funktioner vi skapade i src/app/context/todo.context.jsx fil.
För att återge src/app/components/Todo.jsx komponent för varje uppgift, gå in på src/app/components/Todos.jsx fil och villkorligt kartlägga genom uppgifter direkt efter rubrik avslutande tagg.
Testa din applikation i en webbläsare och bekräfta att den ger det förväntade resultatet.
Spara uppgifter i lokal lagring
För närvarande återställs uppgifterna om du uppdaterar sidan och alla som du har skapat förkastas. Ett sätt att lösa detta problem är att lagra uppgifterna i webbläsarens lokala lagring.
Web storage API är en förbättring av cookie-lagring, med funktioner som förbättrar upplevelsen för både användare och utvecklare.