Русский
Открыть в Telegram

Пост useCallback и утечки памяти

3 июня 2024
З
Заметки про React
Ссылка
нажмите — покажем
useCallback и утечки памяти В своем блоге Кевин Шинер поделился об опыте поиска утечек памяти при использовании useCallback. Рассмотрим пример: import { useState, useCallback } from "react"; class BigObject { public readonly data = new Uint8Array(1024 * 1024 * 10); } export const App = () => { const [countA, setCountA] = useState(0); const [countB, setCountB] = useState(0); const bigData = new BigObject(); // 10MB of data const handleClickA = useCallback(() => { setCountA(countA + 1); }, [countA]); const handleClickB = useCallback(() => { setCountB(countB + 1); }, [countB]); // … }; Если попеременно вызывать handleClickA и handleClickB, то произойдет бесконечная утечка памяти. Например, при вызове функции handleClickA будет заново создан колбек только для handleClickA, т.к. поменялся countA. Для handleClickB останется старый колбек с текущей областью видимости. Новая область видимости будет хранить ссылку на новый колбек handleClickA и старый колбек handleClickB, внутри которых старая область видимости компонента. Основная проблема связана с тем, что в одном компоненте разные useCallback могут ссылаться друг на друга и на другие данные через замыкания. Эти замыкания сохраняются в памяти до тех пор, пока useCallback не будет создан заново. Поэтому наличие в компоненте более одного useCallback затрудняет понимание того, что хранится в памяти. Для того чтобы избежать утечек памяти в компонентах, придерживайтесь следующих советов: - Пишите небольшие компоненты и используйте кастомные хуки. - Избегайте захвата других замыканий. Это может произойти, если вы вызываете из одного useCallback другой useCallback. - Избегайте мемоизации, когда в этом нет необходимости. - Используйте useRef для хранения больших объектов. https://schiener.io/2024-03-03/react-closures
95 · 5K ·

Рядом в ленте

ЗЗаметки про ReactВлияние Styled Components на время ответа SSR В своем блоге Эндрю Левин написал статью о результатах измерения перфоманса SSR приложения со Styled Components. SЗЗаметки про ReactАвтоматическая инвалидация запросов в React Query Reacy Query позволяет инвалидировать запросы в ручном режиме queryClient.invalidateQueries({ queryKey: ['todos
это сообщение
ЗЗаметки про ReactRestyle Новая CSS-in-JS библиотека, совместимая с RSC, которая использует новую фичу поднятия стилей и дедупликацию React 19. Пример использования через функциюЗЗаметки про ReactИспользование React Compiler на реальном проекте В своем блоге Надя Макаревич рассказала об опыте использования React Compiler на нескольких реальных больших пр
ЗЗаметки про ReactЗаметки про React@ru_react_notes · канал · Технологии
3 412подписчиков491постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем