«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Хуки `useCallback` против `useMemo`

Хуки `useCallback` против `useMemo`

Опубликовано 9 ноября 2024 г.
Просматривать:789

`useCallback` vs `useMemo` Hooks

Повышение производительности React: useCallback против useMemo Hooks

Хуки useCallback и useMemo в React имеют решающее значение для оптимизации производительности ваших приложений. Понимание того, когда и как их использовать, может избавить вас от ненужных повторных рендерингов и обеспечить бесперебойную работу вашего приложения. В этой статье мы рассмотрим реальные примеры эффективного использования useCallback и useMemo.

Когда использовать useCallback

Хук useCallback возвращает запомненную версию функции обратного вызова, что означает, что он воссоздает функцию только в случае изменения одной из ее зависимостей. Это особенно полезно при передаче функций в качестве свойств дочерним компонентам, чтобы предотвратить их ненужный повторный рендеринг.

Пример в реальном времени: предотвращение ненужных повторных рендерингов

Предположим, у вас есть родительский компонент, который передает функцию дочернему компоненту. Без использования useCallback дочерний компонент будет перерисовываться каждый раз при рендеринге родительского компонента, даже если логика функции не изменилась.

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

const ParentComponent = () => {
  const [count, setCount] = useState(0);

  // Using useCallback to memoize the function
  const handleIncrement = useCallback(() => {
    setCount(count   1);
  }, [count]);

  return (
    

Count: {count}

); }; export default ParentComponent;

В приведенном выше примере handleIncrement запоминается с помощью useCallback. ChildComponent будет выполнять повторный рендеринг только при изменении количества, что предотвращает ненужный повторный рендеринг и повышает производительность.

Когда использовать useMemo

Хук useMemo используется для запоминания результата функции, пересчитывая кэшированный результат только при изменении одной из ее зависимостей. Это полезно для оптимизации производительности в ситуациях, когда функция выполняет дорогостоящие вычисления.

Пример реального времени: оптимизация дорогостоящих вычислений

Предположим, у вас есть компонент, который выполняет трудоемкую операцию, например фильтрацию большого списка.

import React, { useState, useMemo } from 'react';

const ExpensiveComponent = ({ items }) => {
  const [filter, setFilter] = useState('');

  // Using useMemo to optimize expensive filtering
  const filteredItems = useMemo(() => {
    console.log('Filtering items...');
    return items.filter(item => item.includes(filter));
  }, [items, filter]);

  return (
    
setFilter(e.target.value)} placeholder="Filter items" />
    {filteredItems.map((item, index) => (
  • {item}
  • ))}
); }; export default ExpensiveComponent;

В этом примере useMemo используется для кэширования результата фильтрации массива элементов. Таким образом, дорогостоящая операция фильтрации пересчитывается только при изменении элементов или фильтра, что позволяет избежать ненужных вычислений.

Рекомендации по использованию useCallback и useMemo

  • Используйте useCallback при передаче функций дочерним компонентам, чтобы избежать ненужного повторного рендеринга.
  • Используйте useMemo для дорогостоящих вычислений, которые не нужно пересчитывать при каждом рендеринге.
  • Избегайте их злоупотребления. Мемоизация усложняет код и иногда может затруднить его чтение. Используйте их только в том случае, если вы обнаружите проблемы с производительностью.
  • Запомните массив зависимостей. Всегда точно указывайте зависимости; в противном случае вы можете столкнуться с ошибками или неожиданным поведением.

Заключение

Хуки useCallback и useMemo в React — это мощные инструменты для оптимизации производительности компонентов за счет исключения ненужных повторных рендерингов и дорогостоящих вычислений. Тщательно применяя эти хуки, вы можете обеспечить эффективную работу вашего приложения React.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/sivamani18/usecallback-vs-usememo-hooks-4gj8?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3