Håndtering af Sideeffekter med useEffect
Stryg for at vise menuen
Hooken useEffect gør det muligt at synkronisere komponenten med eksterne faktorer/tjenester, herunder datahentning, abonnementer, manuelle ændringer osv.
Syntaks:
Det første argument (setup) er en pilesyntaks-funktion, som udføres efter hver rendering. Det andet argument (dependencies) er et valgfrit array af afhængigheder. Hvis dependencies angives, vil effekten kun blive genudført, hvis en af afhængighederne har ændret sig siden sidste rendering. Hvis arrayet med afhængigheder udelades, vil effekten køre efter hver rendering.
useEffect(setup, dependencies)
Da vi ved, at setup skal være en pilesyntaks-funktion og dependencies skal være et array, får vi følgende optegnelse af hooken useEffect.
useEffect(() => {
// Something that we need to do
// after the component is rendered or updated
}, [<optional_dependencies>])
React-komponenter er ofte afhængige af kombinationen af useEffect- og useState-hooks. Disse hooks arbejder sammen for at håndtere tilstand og sideeffekter i komponenter.
Eksempel 1:
Opret Articles-komponenten, som vil benytte useEffect-hooken til at tildele data til articles-tilstanden. Dette er en fremragende mulighed for at udforske den kraftfulde kombination af React-hooks.
import { useEffect, useState } from "react";
import fetchData from "../service/api";
const Articles = () => {
const [articles, setArticles] = useState([]);
useEffect(() => {
fetchData()
.then((resp) => {
setArticles(resp.jokes);
})
.catch((error) => {
console.error(error);
});
}, []);
return (
// Render some markup based on the articles data
);
};
Inden for denne komponent anvendes useEffect-hooken til at sikre, at articles-tilstanden bliver udfyldt med data. Som nævnt tidligere, udføres useEffect-funktionen efter hver rendering, hvilket garanterer, at data vises for brugeren, hvis de er hentet. Dette sikrer en problemfri brugeroplevelse med opdateret indhold.
Linje for linje forklaring:
- Linje 1: Vi importerer
useEffectoguseStatehooks fra React-biblioteket for at udnytte dets funktionalitet; - Linje 2: Vi importerer funktionen
fetchDatafra "../service/api". Denne funktion er ansvarlig for at foretage en API-anmodning og hente data; - Linje 4:
Articles-komponenten defineres ved hjælp af den konventionelle funktionssyntaks; - Linje 5: Vi initialiserer tilstanden ved hjælp af
useStatehook, hvilket repræsenterer den initiale værdi af variablenarticles. I dette eksempel er det et tomt array; - Linje 7-15: Det reelle brugsscenarie for
useEffecthook;- Linje 7 og linje 15: er syntaksen. Det er sådan, vi vil bruge det;
- Linje 8: funktionen
fetchDatakaldes. Denne funktion forventes at foretage en API-anmodning og returnere et promise; - Linje 9-11: Når promiset bliver opfyldt (
then-blok), modtages etresp-objekt. Dataene udtrækkes frarespved hjælp afresp.jokes, som sættes ind iarticles-tilstanden ved hjælp afsetArticles; - Linje 12-14: Hvis der opstår en fejl under API-anmodningen (i
catch-blokken), logges den til konsollen medconsole.error.
- Linje 17-19: Komponentens markup bliver gengivet.
Fuld app-kode:
Eksempel 2:
Vi opretter Counter-komponenten til at spore en counter-værdi. Opgaven er at logge værdien af variablen counter, hver gang den ændres. For at opnå dette vil vi benytte useEffect hook med et afhængighedsarray bestående af variablen counter.
import React, { useState, useEffect } from "react";
const Counter = () => {
const [count, setCount] = useState(0);
useEffect(() => {
console.log("Count has changed:", count);
}, [count]);
const handleIncrement = () => {
setCount(count + 1);
};
return (
<div>
<p>Count: {count}</p>
<button onClick={handleIncrement}>Increment</button>
</div>
);
};
Linje for linje forklaring:
- Linje 1: Vi importerer
useEffectoguseStatehooks fra React-biblioteket for at udnytte dets funktionalitet; - Linje 3: Den konventionelle funktionssyntaks definerer "Counter"-komponenten;
- Linje 4: Vi initialiserer tilstanden ved hjælp af
useStatehook, hvilket repræsenterer den initiale værdi af variablencount. I dette eksempel er den0; - Linje 6-8: Det faktiske anvendelsestilfælde for
useEffecthook;- Linje 7: denne logik udføres, hver gang værdien i afhængighedsarrayet ændres. I dette tilfælde er det variablen
count; - Linje 8: afhængighedsarray. Vi informerer React om, at når værdien af variablen
countændres, skal koden inde iuseEffecthook-funktionen køres.
- Linje 7: denne logik udføres, hver gang værdien i afhængighedsarrayet ændres. I dette tilfælde er det variablen
- Linje 14-19: Komponentens markup bliver gengivet.
Fuld app-kode:
Tag venligst et øjeblik til at inspicere konsollen og observere eksekveringslogikken for pilfunktionen inde i useEffect hooken. Pilfunktionen udføres først ved den indledende rendering og kaldes derefter igen, hver gang værdien af variablen counter ændres. Du kan bekræfte denne adfærd ved at observere de tilsvarende logs i konsollen.
1. Hvad er formålet med useEffect-hooken i React?
2. Hvilke to hovedargumenter tager useEffect-hooken?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat