Potęga haków optymalizujących wydajność w React: useMemo, useCallback i React.memo

May 04 2023
Jeśli chodzi o budowanie aplikacji React, ważne jest, aby maksymalnie zoptymalizować wydajność. Jednym z najskuteczniejszych sposobów na zrobienie tego jest użycie haków React optymalizujących wydajność: useMemo, useCallback i React.
Zdjęcie autorstwa Markusa Spiske na Unsplash

Jeśli chodzi o budowanie aplikacji React, ważne jest, aby maksymalnie zoptymalizować wydajność. Jednym z najskuteczniejszych sposobów na to jest użycie haków React optymalizujących wydajność: useMemo, useCallback, i React.memo. W tym artykule zagłębimy się w każdy z tych haków, co robią i kiedy ich używać.

co to jest useMemo?

useMemojest hakiem, który pozwala zapamiętać wynik funkcji, dzięki czemu jest on ponownie obliczany tylko wtedy, gdy zmieniają się jego zależności. Jest to szczególnie przydatne, gdy masz funkcję kosztowną obliczeniowo, którą chcesz uruchomić, ale tylko wtedy, gdy jest to konieczne. Używając useMemo, możesz zapobiec niepotrzebnemu ponownemu renderowaniu i poprawić wydajność aplikacji.

Oto przykład użycia useMemo:

import React, { useMemo } from 'react';

function MyComponent({ data }) {
  const expensiveFunction = useMemo(() => {
    // perform some expensive operation
    return data.map((item) => item * 2);
  }, [data]);

  return (
    <div>
      {/* use the result of the expensive function */}
      {expensiveFunction.map((item) => (
        <div>{item}</div>
      ))}
    </div>
  );
}

co to jest useCallback?

useCallbackto hak, który pozwala zapamiętać funkcję, dzięki czemu jest odtwarzana tylko wtedy, gdy zmieniają się jej zależności. Jest to przydatne, gdy masz funkcję, która jest używana jako rekwizyt dla komponentu potomnego, ale ta funkcja zmienia się przy każdym renderowaniu. Używając useCallback, możesz zapobiec niepotrzebnemu ponownemu renderowaniu komponentu potomnego.

Oto przykład użycia useCallback:

import React, { useCallback } from 'react';
import ChildComponent from './ChildComponent';

function MyComponent({ data }) {
  const handleClick = useCallback(() => {
    console.log('clicked');
  }, []);

  return (
    <div>
      <ChildComponent onClick={handleClick} />
    </div>
  );
}

co to jest React.memo?

React.memoto komponent wyższego rzędu (HOC), który umożliwia zapamiętanie komponentu, dzięki czemu jest on ponownie renderowany tylko wtedy, gdy zmieniają się jego rekwizyty. Jest to przydatne, gdy masz komponent, którego renderowanie jest drogie, ale jego rekwizyty nie zmieniają się często. Używając React.memo, możesz zapobiec niepotrzebnemu ponownemu renderowaniu komponentu.

Oto przykład użycia React.memo:

import React from 'react';
import ListItem from './ListItem';

const List = React.memo(({ items }) => {
  console.log('Rendering List...');
  return (
    <ul>
      {items.map((item) => (
        <ListItem key={item.id} item={item} />
      ))}
    </ul>
  );
});

export default List;

Kiedy używać każdego haka

Użyj useMemo, gdy masz ciężkie obliczenia, które nie muszą być wykonywane przy każdym renderowaniu. Użyj useCallback, gdy masz funkcję, która jest przekazywana jako rekwizyt i chcesz uniknąć niepotrzebnego ponownego renderowania. Użyj React.memo, gdy masz komponent, który pobiera właściwości, ale nie jest zależny od swojego stanu, i chcesz uniknąć niepotrzebnego ponownego renderowania. Każdy z tych haków może znacznie poprawić wydajność Twojej aplikacji w odpowiednich okolicznościach.

Ogólne użycie

Ważne jest, aby używać haków optymalizujących wydajność rozsądnie i tylko wtedy, gdy zapewniają one wyraźną korzyść w zakresie wydajności. Podczas gdy useMemo, useCallback i React.memo mogą znacząco poprawić wydajność aplikacji React w odpowiednich okolicznościach, mogą również niepotrzebnie komplikować i zmniejszać czytelność kodu, jeśli są nadużywane. Ważne jest, aby dokładnie rozważyć kompromisy wynikające z używania tych haczyków i używać ich tylko wtedy, gdy zapewniają one wyraźną korzyść w zakresie wydajności. Ponadto ważne jest, aby profilować aplikację i używać narzędzi do monitorowania wydajności, aby upewnić się, że optymalizacje faktycznie poprawiają wydajność.

Wniosek

optymalizacja wydajności ma kluczowe znaczenie w budowaniu wysokiej jakości aplikacji React. Korzystając z useMemo, useCallback i React.memo, programiści mogą poprawić wydajność swoich aplikacji, unikając niepotrzebnego ponownego renderowania i optymalizując wykorzystanie pamięci. Ważne jest, aby zrozumieć cel i funkcjonalność każdego haka i używać ich rozważnie we właściwych okolicznościach, aby osiągnąć najlepszą możliwą optymalizację wydajności.