Kada upravljate složenim stanjima u aplikaciji Next, stvari mogu brzo postati nezgodne. Tradicionalne udice poput useState pomoći u upravljanju državom, ali predstavljaju problem propelernog bušenja. Prop bušenje znači prosljeđivanje podataka ili funkcija kroz nekoliko komponenti.
Bolji pristup bio bi odvajanje vaše logike upravljanja stanjem od komponenti i ažuriranje tih stanja s bilo kojeg mjesta u vašoj aplikaciji. Provest ćemo vas kroz korištenje Context API-ja dok izrađujemo jednostavnu aplikaciju popisa obveza.
Prije nego započnete svoj popis obaveza
Prije nego što možete izraditi aplikaciju popisa obaveza, trebat će vam:
Osnovno znanje o moderni JavaScript operatori i Reactova useState kuka.
Razumijevanje kako destrukturirati nizove i objekte u JavaScriptu.
Čvor v16.8 ili noviji instaliran na vašem lokalnom računalu i poznavanje upravitelji paketa poput npm-a odnosno pređe.
Gotov projekt možete pronaći na GitHub za referencu i daljnje istraživanje.
Stanje aplikacije odnosi se na trenutno stanje aplikacije u određenom trenutku. To uključuje informacije koje aplikacija zna i kojima upravlja, kao što su korisnički unos i podaci dohvaćeni iz baze podataka ili API-ja (Application Programming Interface).
Da biste razumjeli stanje aplikacije, razmotrite moguća stanja jednostavne aplikacije brojača. Oni uključuju:
Zadano stanje kada je brojač na nuli.
Povećano stanje kada se brojač poveća za jedan.
Smanjeno stanje kada se brojač smanji za jedan.
Stanje resetiranja kada se brojač vrati u zadano stanje.
React komponenta se može pretplatiti na promjene stanja. Kada korisnik stupi u interakciju s takvom komponentom, njegove radnje—kao što su klikovi gumba—mogu upravljati ažuriranjem stanja.
Ovaj isječak prikazuje jednostavnu aplikaciju brojača, u zadanom stanju, koja upravlja stanjem na temelju klikova:
konst [brojač, setBrojač] = useState(0);
povratak (
{counter}</h1>
Postavljanje i instalacija
Repozitorij projekta sadrži dvije grane: starter i kontekst. Možete koristiti početnu granu kao bazu za izgradnju projekta ili kontekstualnu granu za pregled konačnog demo-a.
Kloniranje početne aplikacije
Početna aplikacija pruža korisničko sučelje koje će vam trebati za konačnu aplikaciju, tako da se možete usredotočiti na implementaciju osnovne logike. Otvorite terminal i pokrenite sljedeću naredbu za kloniranje početne grane repozitorija na vaš lokalni stroj:
Izvedite sljedeću naredbu unutar direktorija projekta da biste instalirali ovisnosti i pokrenuli svoj razvojni poslužitelj:
pređa && pređa dev
Ili:
npm i && npm pokreni dev
Ako je sve prošlo dobro, korisničko sučelje bi se trebalo prikazati u vašem pregledniku:
Provedba logike
Context API pruža način za upravljanje i dijeljenje podataka o stanju među komponentama, bez potrebe za ručnim bušenjem.
Korak 1: Stvorite i izvezite kontekst
Stvoriti src/aplikacija/kontekst mapu za pohranu datoteke konteksta i održavanje direktorija projekta dobro organiziranim. Unutar ove mape stvorite a todo.context.jsx datoteku koja će sadržavati svu kontekstnu logiku za aplikaciju.
Uvezi stvoriti Kontekst funkcija iz reagirati biblioteku i pozvati je, pohranjujući rezultat u varijablu:
Neposredno prije povratak izjava, stvoriti a handleTodoInput funkcija koja će se pokrenuti kada korisnik upiše zadatak. Ova funkcija zatim ažurira zadatak država.
Dodati createTask funkcija koja će se pokrenuti kada korisnik pošalje zadatak. Ova funkcija ažurira zadaci stanje i novom zadatku dodjeljuje nasumični ID.
Sada kada ste kreirali stanja i napisali kod za upravljanje njima, morate ta stanja i funkcije rukovatelja učiniti dostupnima Davatelj. Možete ih dostaviti u obliku predmeta, koristeći vrijednost vlasništvo od Davatelj komponenta.
The Davatelj koju ste stvorili mora omotati komponentu najviše razine kako bi kontekst bio dostupan cijeloj aplikaciji. Da biste to učinili, uredite src/aplikacija/stranica.jsx i zamotajte Todos komponenta s TodoContextProvider komponenta:
; </TodoContextProvider>;
Korak 5: Koristite kontekst u komponentama
Uredite svoje src/app/components/Todos.jsx datoteka i destruktura zadaci, zadatak, handleTodoInput, i createTask putem poziva na useTodoContext funkcija.
Sada ažurirajte element obrasca za rukovanje događajem podnošenja i promjenama u glavnom polju za unos:
Korak 6: Renderirajte zadatke u korisničkom sučelju
Sada možete koristiti aplikaciju za izradu i dodavanje zadatka u zadaci popis. Da biste ažurirali prikaz, morat ćete mapirati postojeće zadaci i prikazati ih u korisničkom sučelju. Najprije stvorite a src/app/components/Todo.jsx komponenta za držanje jedne stavke obveze.
Unutar src/app/components/Todo.jsx komponentu, uredite ili izbrišite zadatak pozivanjem updateTask i deleteTask funkcije u kojima smo kreirali src/app/context/todo.context.jsx datoteka.
Za prikaz src/app/components/Todo.jsx komponenta za svaku zadatak, idite u src/app/components/Todos.jsx datoteku i uvjetno kartu kroz zadaci odmah nakon Zaglavlje oznaka za zatvaranje.
Testirajte svoju aplikaciju u pregledniku i potvrdite da daje očekivani rezultat.
Spremanje zadataka u lokalnu pohranu
Trenutačno će osvježavanje stranice poništiti zadatke, odbacujući sve koje ste izradili. Jedan od načina za rješavanje ovog problema je pohranjivanje zadataka u lokalnu pohranu preglednika.
API za web pohranu je poboljšanje pohrane kolačića, sa značajkama koje poboljšavaju iskustvo za korisnike i programere.