TGViewer
artalog artalog @artalog · 4.21K subscribers
Post #16 1.07K
usePureCallback

Опубликовал свои мысли и пример кода на счет мемоизации функций в реакте. Пакета нет в НМП, потому что вся реализация занимает чуть больше ста байтов. Без гзипа 🙂

Проблема в том что в реакте нет апи для ленивого чтения данных.

Пример (даю эту задачку на интервью): есть тяжелый компонент таблицы с пропом функцией `getData`, которая дергается по таймауту / инпуту или еще чему. Есть отдельно фильтры, которые нужно учитывать при запросе в getData. Как менять фильтры, что бы не ререндерить таблицу?

Идея простая: зачем пересоздавать функцию на каждое изменение зависимых данных и ломать этим нижележащую мемоизацию, если можно отделить функцию от зависимостей, сделав ее чистой и получить неизменяемую ссылку.

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

Конечно, описанные проблемы, при их проявлении, будет очень не приятно дебажить, но на моей практике это какие-то совсем редкие случаи, а профит от постоянных ссылок на функции заметен сильно (у меня с этим постоянно проблемы).

Материалы по теме:
- ссылочная прозрачность

#perf #immutable
GitHub GitHub - artalar/usePureCallback: useCallback doing right useCallback doing right. Contribute to artalar/usePureCallback development by creating an account on GitHub.
  • 👍 5
More from @artalog
  1. Oct 4, 2026Несколько дней исследований, почти десяток идей, и я таки смог с Опусом задизайнить хелпер…
  2. Oct 1, 2026Для меня главный приоритет в reatom.dev уже несколько лет - универсальность. Он должен реш…
  3. Sep 30, 2026https://t.me/synaptic_garden/1370 (уж извините за частый постинг, тем более про ИИ, но важ…
  4. Sep 30, 2026Post #2011
  5. Sep 30, 2026Очень круто! Композиты сильно упрощают работу с иммутабельными данными, точнее с их equali…
  6. Sep 29, 2026Bun там с AOT экспериментирует!
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →