Omgaan met Neveneffecten met useEffect
Veeg om het menu te tonen
De useEffect-hook maakt het mogelijk om het component te synchroniseren met externe factoren/diensten, waaronder het ophalen van data, abonnementen, handmatige wijzigingen, enzovoort.
Syntaxis:
Het eerste argument (setup) is een pijlfunctie die wordt uitgevoerd na elke render. Het tweede argument (dependencies) is een optionele array van afhankelijkheden. Als de dependencies zijn opgegeven, wordt het effect alleen opnieuw uitgevoerd als een van de afhankelijkheden is gewijzigd sinds de laatste render. Als de dependencies-array wordt weggelaten, wordt het effect na elke render uitgevoerd.
useEffect(setup, dependencies)
Omdat we weten dat setup een pijlfunctie moet zijn en dependencies een array moet zijn, krijgen we het volgende voorbeeld van de useEffect-hook.
useEffect(() => {
// Something that we need to do
// after the component is rendered or updated
}, [<optional_dependencies>])
React-componenten vertrouwen vaak op de combinatie van de hooks useEffect en useState. Deze hooks werken samen om de toestand en neveneffecten binnen componenten te beheren.
Voorbeeld 1:
Hier maken we de Articles-component, die de useEffect-hook gebruikt om data toe te wijzen aan de articles-toestand. Dit is een uitstekende gelegenheid om de krachtige combinatie van React-hooks te verkennen.
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
);
};
Binnen deze component gebruiken we de useEffect-hook om ervoor te zorgen dat de articles-toestand wordt gevuld met data. Zoals eerder vermeld, wordt de useEffect-functie uitgevoerd na elke render, waardoor gegarandeerd wordt dat data aan de gebruiker wordt getoond als deze beschikbaar is. Dit zorgt voor een soepele gebruikerservaring met actuele inhoud.
Regel-voor-regel uitleg:
- Regel 1: We importeren de
useEffect- enuseState-hooks uit de React-bibliotheek om hun functionaliteit te benutten; - Regel 2: We importeren de functie
fetchDatauit "../service/api". Deze functie is verantwoordelijk voor het uitvoeren van een API-verzoek en het ophalen van gegevens; - Regel 4: De
Articles-component wordt gedefinieerd met de conventionele functiesyntaxis; - Regel 5: We initialiseren de state met de
useState-hook, wat de beginwaarde van de variabelearticlesvoorstelt. In dit voorbeeld is dat een lege array; - Regels 7-15: Het daadwerkelijke gebruik van de
useEffect-hook;- Regel 7 en regel 15: is de syntaxis. Dit is hoe we het zullen gebruiken;
- Regel 8: de functie
fetchDatawordt aangeroepen. Deze functie wordt verwacht een API-verzoek uit te voeren en een promise terug te geven; - Regels 9-11: Wanneer de promise wordt opgelost (
then-blok), ontvangt het eenresp-object. De data wordt uitrespgehaald viaresp.jokes, en wordt metsetArticlesin de statearticlesgezet; - Regels 12-14: Als er een fout optreedt tijdens het API-verzoek (in het
catch-blok), wordt deze gelogd naar de console metconsole.error.
- Regels 17-19: De markup van de component wordt gerenderd.
Voorbeeld 2:
We maken de Counter-component om een counter-waarde bij te houden. De taak is om de waarde van de variabele counter te loggen telkens wanneer deze verandert. Hiervoor gebruiken we de useEffect-hook met een afhankelijkheidsarray die de variabele counter bevat.
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>
);
};
Regel-voor-regel uitleg:
- Regel 1: We importeren de
useEffect- enuseState-hooks uit de React-bibliotheek om hun functionaliteit te benutten; - Regel 3: De conventionele functiesyntaxis definieert de "Counter"-component;
- Regel 4: We initialiseren de state met de
useState-hook, wat de beginwaarde van de variabelecountvoorstelt. In dit voorbeeld is dat0; - Regels 6-8: Het daadwerkelijke gebruik van de
useEffect-hook;- Regel 7: deze logica wordt uitgevoerd telkens wanneer de waarde in de afhankelijkheidsarray verandert. In dit geval is dat de variabele
count; - Regel 8: afhankelijkheidsarray. We laten React weten dat wanneer de waarde van de variabele
countverandert, de code binnen de functie van deuseEffect-hook moet worden uitgevoerd.
- Regel 7: deze logica wordt uitgevoerd telkens wanneer de waarde in de afhankelijkheidsarray verandert. In dit geval is dat de variabele
- Regels 14-19: De markup van de component wordt gerenderd.
Neem even de tijd om de console te inspecteren en observeer de uitvoeringslogica van de pijlfunctie binnen de useEffect-hook. De pijlfunctie wordt eerst uitgevoerd bij de initiële render en vervolgens opnieuw aangeroepen telkens wanneer de waarde van de variabele counter verandert. Je kunt dit gedrag verifiëren door de bijbehorende logs in de console te bekijken.
1. Wat is het doel van de useEffect-hook in React?
2. Wat zijn de twee belangrijkste argumenten die de useEffect-hook accepteert?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.