Prestaties Optimaliseren Met de useMemo-Hook
De useMemo-hook stelt ons in staat het resultaat van een functie te onthouden, waardoor dure berekeningen worden geoptimaliseerd door het resultaat in de cache op te slaan. Dit is voordelig wanneer er frequente en intensieve berekeningen plaatsvinden die hetzelfde resultaat opleveren zolang de gegevens niet veranderen. Hierdoor zijn overbodige herberekeningen niet nodig, wat leidt tot betere prestaties.
Syntax:
We declareren een nieuwe variabele, zoals cachedValue, en wijzen deze toe aan de useMemo-hook. Binnen de haakjes van de hook geven we een functie op (bijvoorbeeld calculateValue), die wordt uitgevoerd om de onthouden waarde te berekenen. Deze functie kan elke geldige JavaScript-functie zijn. Daarnaast voegen we een tweede argument toe—een array genaamd dependencies—die bestaat uit de waarden waarop de onthouden waarde is gebaseerd.
const cachedValue = useMemo(calculateValue, dependencies)
Wanneer een van de afhankelijkheden in de dependencies-array verandert, wordt de onthouden waarde opnieuw berekend. Als de afhankelijkheden echter gelijk blijven tussen renders, retourneert React de eerder berekende waarde zonder opnieuw te berekenen.
Opmerking
Deze optimalisatie helpt de prestaties te verbeteren door onnodige berekeningen te vermijden en resulteert in een efficiëntere gebruikerservaring.
Voorbeeld 1
Hier wordt de ShoppingCart-component aangemaakt, die informatie opslaat over het aantal geselecteerde producten door de gebruiker. Daarnaast wordt de logica afgehandeld voor het berekenen van het totale bedrag, waarmee het te betalen bedrag wordt aangegeven. Het belangrijkste doel is om de totale som te memoriseren en deze alleen opnieuw te berekenen wanneer de gebruiker de products-prop aanpast die aan deze component wordt doorgegeven.
import React, { useMemo } from "react";
const ShoppingCart = ({ products }) => {
const totalPrice = useMemo(() => {
let sum = 0;
for (const item of products) {
sum += item.price * item.quantity;
}
return sum;
}, [products]);
return (
<div>
<h2>Shopping Cart</h2>
<ul>
{products.map(({ id, name, price, quantity }) => (
<li key={id}>
<p>
<span>{name} -</span>
<span>
${price} x {quantity}
</span>
</p>
</li>
))}
</ul>
<h3>
Total Price: <span>${totalPrice}</span>
</h3>
</div>
);
};
De berekening van de totalPrice wordt uitgevoerd binnen de useMemo-hook, waardoor onnodige herberekeningen bij elke her-render van de component worden voorkomen.
Regel-voor-regel uitleg:
- Regel 1: De
useMemo-hook wordt geïmporteerd uit de React-bibliotheek om de functionaliteit te benutten; - Regel 3: De
ShoppingCart-component wordt gedefinieerd met de conventionele functiesyntaxis; - Regel 4-10: De variabele
totalPricewordt aangemaakt, verantwoordelijk voor het totale bedrag dat de gebruiker moet betalen. DeuseMemo-hook wordt gebruikt om te voorkomen dat de berekening bij elke render wordt uitgevoerd;- Regel 5-9: Binnen de arrow-functie die aan
useMemowordt doorgegeven, wordt de logica voor het berekenen van de totalesumgeïmplementeerd. Elk item in deproducts-array wordt doorlopen, waarbij de prijs wordt vermenigvuldigd met dequantityen opgeteld bij de variabelesum; - Regel 10: De afhankelijkheidsarray
[products]wordt aan deuseMemo-hook meegegeven. Dit geeft aan dat de gememoriseerde waarde alleen opnieuw moet worden berekend als deproducts-array verandert.
- Regel 5-9: Binnen de arrow-functie die aan
- Regels 12-31: De markup van de component wordt gerenderd.
- Regel 16: De
map-methode wordt gebruikt om elk product in deproducts-array te renderen, waarbij een overeenkomstig JSX-element wordt aangemaakt; - Regel 17: Het
key-attribuut wordt ingesteld om efficiënte rendering van de array-items te waarborgen en React te helpen elk item uniek te identificeren;
- Regel 16: De
- Regel 28: De waarde van de variabele
totalPricewordt weergegeven binnen de JSX, waarmee de berekende totaalprijs wordt getoond.
Volledige app-code:
Opmerking
Het is raadzaam om de
useEffect- enuseMemo-hooks niet te combineren om duidelijkheid te behouden en verwarring te voorkomen. Het belangrijkste verschil zit in hun respectievelijke doeleinden:useEffectwordt gebruikt voor het beheren van neveneffecten en de levenscyclus van componenten, terwijluseMemodure berekeningen onthoudt om de prestaties te verbeteren.
1. Wat is het belangrijkste doel van de useMemo-hook in React?
2. Wanneer berekent de useMemo hook zijn opgeslagen waarde opnieuw?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Can you explain when I should use useMemo instead of useEffect?
What are some common mistakes to avoid when using useMemo?
Can you show another example of useMemo in a different context?
Awesome!
Completion rate improved to 2.17
Prestaties Optimaliseren Met de useMemo-Hook
Veeg om het menu te tonen
De useMemo-hook stelt ons in staat het resultaat van een functie te onthouden, waardoor dure berekeningen worden geoptimaliseerd door het resultaat in de cache op te slaan. Dit is voordelig wanneer er frequente en intensieve berekeningen plaatsvinden die hetzelfde resultaat opleveren zolang de gegevens niet veranderen. Hierdoor zijn overbodige herberekeningen niet nodig, wat leidt tot betere prestaties.
Syntax:
We declareren een nieuwe variabele, zoals cachedValue, en wijzen deze toe aan de useMemo-hook. Binnen de haakjes van de hook geven we een functie op (bijvoorbeeld calculateValue), die wordt uitgevoerd om de onthouden waarde te berekenen. Deze functie kan elke geldige JavaScript-functie zijn. Daarnaast voegen we een tweede argument toe—een array genaamd dependencies—die bestaat uit de waarden waarop de onthouden waarde is gebaseerd.
const cachedValue = useMemo(calculateValue, dependencies)
Wanneer een van de afhankelijkheden in de dependencies-array verandert, wordt de onthouden waarde opnieuw berekend. Als de afhankelijkheden echter gelijk blijven tussen renders, retourneert React de eerder berekende waarde zonder opnieuw te berekenen.
Opmerking
Deze optimalisatie helpt de prestaties te verbeteren door onnodige berekeningen te vermijden en resulteert in een efficiëntere gebruikerservaring.
Voorbeeld 1
Hier wordt de ShoppingCart-component aangemaakt, die informatie opslaat over het aantal geselecteerde producten door de gebruiker. Daarnaast wordt de logica afgehandeld voor het berekenen van het totale bedrag, waarmee het te betalen bedrag wordt aangegeven. Het belangrijkste doel is om de totale som te memoriseren en deze alleen opnieuw te berekenen wanneer de gebruiker de products-prop aanpast die aan deze component wordt doorgegeven.
import React, { useMemo } from "react";
const ShoppingCart = ({ products }) => {
const totalPrice = useMemo(() => {
let sum = 0;
for (const item of products) {
sum += item.price * item.quantity;
}
return sum;
}, [products]);
return (
<div>
<h2>Shopping Cart</h2>
<ul>
{products.map(({ id, name, price, quantity }) => (
<li key={id}>
<p>
<span>{name} -</span>
<span>
${price} x {quantity}
</span>
</p>
</li>
))}
</ul>
<h3>
Total Price: <span>${totalPrice}</span>
</h3>
</div>
);
};
De berekening van de totalPrice wordt uitgevoerd binnen de useMemo-hook, waardoor onnodige herberekeningen bij elke her-render van de component worden voorkomen.
Regel-voor-regel uitleg:
- Regel 1: De
useMemo-hook wordt geïmporteerd uit de React-bibliotheek om de functionaliteit te benutten; - Regel 3: De
ShoppingCart-component wordt gedefinieerd met de conventionele functiesyntaxis; - Regel 4-10: De variabele
totalPricewordt aangemaakt, verantwoordelijk voor het totale bedrag dat de gebruiker moet betalen. DeuseMemo-hook wordt gebruikt om te voorkomen dat de berekening bij elke render wordt uitgevoerd;- Regel 5-9: Binnen de arrow-functie die aan
useMemowordt doorgegeven, wordt de logica voor het berekenen van de totalesumgeïmplementeerd. Elk item in deproducts-array wordt doorlopen, waarbij de prijs wordt vermenigvuldigd met dequantityen opgeteld bij de variabelesum; - Regel 10: De afhankelijkheidsarray
[products]wordt aan deuseMemo-hook meegegeven. Dit geeft aan dat de gememoriseerde waarde alleen opnieuw moet worden berekend als deproducts-array verandert.
- Regel 5-9: Binnen de arrow-functie die aan
- Regels 12-31: De markup van de component wordt gerenderd.
- Regel 16: De
map-methode wordt gebruikt om elk product in deproducts-array te renderen, waarbij een overeenkomstig JSX-element wordt aangemaakt; - Regel 17: Het
key-attribuut wordt ingesteld om efficiënte rendering van de array-items te waarborgen en React te helpen elk item uniek te identificeren;
- Regel 16: De
- Regel 28: De waarde van de variabele
totalPricewordt weergegeven binnen de JSX, waarmee de berekende totaalprijs wordt getoond.
Volledige app-code:
Opmerking
Het is raadzaam om de
useEffect- enuseMemo-hooks niet te combineren om duidelijkheid te behouden en verwarring te voorkomen. Het belangrijkste verschil zit in hun respectievelijke doeleinden:useEffectwordt gebruikt voor het beheren van neveneffecten en de levenscyclus van componenten, terwijluseMemodure berekeningen onthoudt om de prestaties te verbeteren.
1. Wat is het belangrijkste doel van de useMemo-hook in React?
2. Wanneer berekent de useMemo hook zijn opgeslagen waarde opnieuw?
Bedankt voor je feedback!