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 pilesyntaksfunktion, 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 pilesyntaksfunktion 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 komponenten Articles, som anvender 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
);
};
I denne komponent anvendes useEffect-hooken til at sikre, at articles-tilstanden bliver udfyldt med data. Som tidligere nævnt, 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 brug af den konventionelle funktionssyntaks; - Linje 5: Vi initialiserer state 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-blokken), modtages etresp-objekt. Dataene udtrækkes frarespved hjælp afresp.jokes, som sættes ind iarticlesstate 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 anvende 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
useStatehooken, som repræsenterer den indledende værdi af variablencount. I dette eksempel er den0; - Linje 6-8: Den faktiske anvendelse af
useEffecthooken;- 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 i funktionen tiluseEffecthooken 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