Ottimizzazione delle Prestazioni con il Hook useMemo
L'hook useMemo consente di memorizzare il risultato di una funzione, ottimizzando calcoli costosi tramite la memorizzazione nella cache del risultato. È vantaggioso quando si eseguono calcoli frequenti e ad alta intensità di risorse che producono lo stesso risultato se i dati non cambiano. Questo elimina la necessità di ricalcoli ridondanti, migliorando così le prestazioni.
Sintassi:
Si dichiara una nuova variabile, ad esempio cachedValue, e la si assegna all'hook useMemo. All'interno delle parentesi dell'hook, si fornisce una funzione (ad esempio calculateValue), che verrà eseguita per calcolare il valore memorizzato. Questa funzione può essere qualsiasi funzione JavaScript valida. Inoltre, si include un secondo argomento—un array chiamato dependencies—che contiene i valori da cui dipende il valore memorizzato.
const cachedValue = useMemo(calculateValue, dependencies)
Quando uno qualsiasi dei valori specificati nell'array dependencies cambia, il valore memorizzato verrà ricalcolato. Tuttavia, se le dipendenze rimangono invariate tra i render, React restituirà il valore precedentemente calcolato senza ricalcolarlo.
Nota
Questa ottimizzazione contribuisce a migliorare le prestazioni evitando calcoli non necessari e garantendo un'esperienza utente più efficiente.
Esempio 1
Creiamo il componente ShoppingCart, che memorizzerà le informazioni sul numero di prodotti selezionati dall'utente. Inoltre, gestirà la logica per il calcolo della somma totale, indicando l'importo che l'utente deve pagare. L'obiettivo principale è memorizzare la somma totale e ricalcolarla solo quando l'utente modifica la prop products passata a questo componente.
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>
);
};
Il calcolo di totalPrice viene eseguito all'interno dell'hook useMemo, che evita ricalcoli non necessari a ogni nuovo rendering del componente.
Spiegazione riga per riga:
- Riga 1: Importazione dell'hook
useMemodalla libreria React per sfruttarne la funzionalità; - Riga 3: Il componente
ShoppingCartviene definito utilizzando la sintassi convenzionale della funzione; - Riga 4-10: Creazione della variabile
totalPriceresponsabile del prezzo totale che l'utente deve pagare. L'hookuseMemoviene utilizzato per evitare calcoli a ogni render;- Riga 5-9: All'interno della funzione freccia passata a
useMemo, viene implementata la logica per il calcolo delsumtotale. Ogni elemento dell'arrayproductsviene iterato, il prezzo viene moltiplicato perquantitye aggiunto alla variabilesum; - Riga 10: L'array di dipendenze
[products]viene fornito all'hookuseMemo. Questo indica che il valore memorizzato deve essere ricalcolato se l'arrayproductscambia.
- Riga 5-9: All'interno della funzione freccia passata a
- Riga 12-31: Viene renderizzato il markup del componente.
- Riga 16: Il metodo
mapviene utilizzato per renderizzare ogni prodotto nell'arrayproducts, creando un elemento JSX corrispondente; - Riga 17: L'attributo
keyviene impostato per garantire un rendering efficiente degli elementi dell'array e aiutare React a identificare ogni elemento in modo univoco; - Riga 28: Il valore della variabile
totalPriceviene visualizzato all'interno del JSX, mostrando il prezzo totale calcolato.
Codice completo dell'app:
Nota
Si consiglia di non mescolare gli hook
useEffecteuseMemoper garantire chiarezza ed evitare confusione. La distinzione principale risiede nei rispettivi scopi:useEffectviene utilizzato per gestire gli effetti collaterali e il ciclo di vita del componente, mentreuseMemomemorizza in cache calcoli costosi per migliorare le prestazioni.
1. Qual è lo scopo principale dell'hook useMemo in React?
2. Quando l'hook useMemo ricalcola il suo valore memorizzato?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 2.17
Ottimizzazione delle Prestazioni con il Hook useMemo
Scorri per mostrare il menu
L'hook useMemo consente di memorizzare il risultato di una funzione, ottimizzando calcoli costosi tramite la memorizzazione nella cache del risultato. È vantaggioso quando si eseguono calcoli frequenti e ad alta intensità di risorse che producono lo stesso risultato se i dati non cambiano. Questo elimina la necessità di ricalcoli ridondanti, migliorando così le prestazioni.
Sintassi:
Si dichiara una nuova variabile, ad esempio cachedValue, e la si assegna all'hook useMemo. All'interno delle parentesi dell'hook, si fornisce una funzione (ad esempio calculateValue), che verrà eseguita per calcolare il valore memorizzato. Questa funzione può essere qualsiasi funzione JavaScript valida. Inoltre, si include un secondo argomento—un array chiamato dependencies—che contiene i valori da cui dipende il valore memorizzato.
const cachedValue = useMemo(calculateValue, dependencies)
Quando uno qualsiasi dei valori specificati nell'array dependencies cambia, il valore memorizzato verrà ricalcolato. Tuttavia, se le dipendenze rimangono invariate tra i render, React restituirà il valore precedentemente calcolato senza ricalcolarlo.
Nota
Questa ottimizzazione contribuisce a migliorare le prestazioni evitando calcoli non necessari e garantendo un'esperienza utente più efficiente.
Esempio 1
Creiamo il componente ShoppingCart, che memorizzerà le informazioni sul numero di prodotti selezionati dall'utente. Inoltre, gestirà la logica per il calcolo della somma totale, indicando l'importo che l'utente deve pagare. L'obiettivo principale è memorizzare la somma totale e ricalcolarla solo quando l'utente modifica la prop products passata a questo componente.
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>
);
};
Il calcolo di totalPrice viene eseguito all'interno dell'hook useMemo, che evita ricalcoli non necessari a ogni nuovo rendering del componente.
Spiegazione riga per riga:
- Riga 1: Importazione dell'hook
useMemodalla libreria React per sfruttarne la funzionalità; - Riga 3: Il componente
ShoppingCartviene definito utilizzando la sintassi convenzionale della funzione; - Riga 4-10: Creazione della variabile
totalPriceresponsabile del prezzo totale che l'utente deve pagare. L'hookuseMemoviene utilizzato per evitare calcoli a ogni render;- Riga 5-9: All'interno della funzione freccia passata a
useMemo, viene implementata la logica per il calcolo delsumtotale. Ogni elemento dell'arrayproductsviene iterato, il prezzo viene moltiplicato perquantitye aggiunto alla variabilesum; - Riga 10: L'array di dipendenze
[products]viene fornito all'hookuseMemo. Questo indica che il valore memorizzato deve essere ricalcolato se l'arrayproductscambia.
- Riga 5-9: All'interno della funzione freccia passata a
- Riga 12-31: Viene renderizzato il markup del componente.
- Riga 16: Il metodo
mapviene utilizzato per renderizzare ogni prodotto nell'arrayproducts, creando un elemento JSX corrispondente; - Riga 17: L'attributo
keyviene impostato per garantire un rendering efficiente degli elementi dell'array e aiutare React a identificare ogni elemento in modo univoco; - Riga 28: Il valore della variabile
totalPriceviene visualizzato all'interno del JSX, mostrando il prezzo totale calcolato.
Codice completo dell'app:
Nota
Si consiglia di non mescolare gli hook
useEffecteuseMemoper garantire chiarezza ed evitare confusione. La distinzione principale risiede nei rispettivi scopi:useEffectviene utilizzato per gestire gli effetti collaterali e il ciclo di vita del componente, mentreuseMemomemorizza in cache calcoli costosi per migliorare le prestazioni.
1. Qual è lo scopo principale dell'hook useMemo in React?
2. Quando l'hook useMemo ricalcola il suo valore memorizzato?
Grazie per i tuoi commenti!