Тёмный

Зачем на самом деле нужен хук useCallback 

Михаил Непомнящий
Подписаться 47 тыс.
Просмотров 38 тыс.
50% 1

Реакт хук useCallback, пожалуй, самый неправильно используемый среди всех хуков, идущих из коробки. Люди либо оборачивают им всё подряд, либо не используют вовсе.
Разбираемся в каких случаях на самом деле полезно испольно хука useCallback.
Мои курсы по вебу с купонами:
✅ mishanep.com/
📢 Поддержка канала:
/ mishanep
www.tinkoff.ru/rm/nepomnyasch...
paypal.me/mishanep

Наука

Опубликовано:

 

25 апр 2023

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 103   
@anonlog
@anonlog Год назад
Михаил, спасибо вам за разъяснение useCallback, его лепят везде где нужно и не нужно и никто не понимает особо, зачем он нужен)) Теперь за 8 минут вашего видео все стало на свои места!! От вас контент просто бесценный!!))☺👍 Лайк однозначно!))
@user-bp7jb5of5d
@user-bp7jb5of5d Год назад
Михаил, спасибо за видео. Как всегда на высоте. Сложные вещи простым языком. Было очень полезно послушать про правильное использование useCallback
@IvanZakharanka
@IvanZakharanka Год назад
Как всегда отлично! Спасибо! А еще я прям офигел насколько хороша новая дока React 😯
@necelentano
@necelentano Год назад
Спасибо Михаил! Полезное видео 👍
@olegsh2888
@olegsh2888 Год назад
Михаил, это огонь! У меня коллеги тоже любят обернуть банальное сравнение 2х переменных в мемоизацию, не парясь, что мемоизация сильно дороже элементарного сравнения 2х примитивов) нужен баланс между «я вообще ничего не знаю про мемоизацию» и «я мемоизирую каждый чих»
@unknownWakeborder
@unknownWakeborder Год назад
Очень полезный материал получился, спасибо!
@user-vm2db5cq1g
@user-vm2db5cq1g Год назад
Михаил как всегда отличное видео и понятное! Спасибо
@SkyAndStarss
@SkyAndStarss 9 месяцев назад
отлично, очень ясное видение ситуации, спасибо!
@sphinxenen
@sphinxenen Год назад
Просто супер доступно объяснил. Спасибо большое!!!
@mrakobes3736
@mrakobes3736 11 месяцев назад
Отличное объяснение, спасибо!
@vladislav_pikiner
@vladislav_pikiner 10 месяцев назад
спасибо за сложные темы простым языком)
@user-jl7vr6xy7g
@user-jl7vr6xy7g 9 месяцев назад
Михаил, это были очень познавательные 8 минут)) Спасибо, наконец-то всё по полочкам с useCallback. На проектах все, в том числе я, его использовали неправильно.
@serjdenisov2114
@serjdenisov2114 Год назад
Михаил, спасибо за информацию!!!
@OlegSas
@OlegSas Год назад
Михаил, спасибо большое! Просто, понятно, интересно.
@tofidndndkkdkwkqe7017
@tofidndndkkdkwkqe7017 Месяц назад
Определенно отличное видео, спасибо!!
@lexymenshicov5278
@lexymenshicov5278 Месяц назад
Спасибо большое за видео, очень качественно всё поясняется
@user-be7cz1ml1j
@user-be7cz1ml1j 9 месяцев назад
До этого видео я не мог понять для чего useCallback и как ей воообще пользоваться. Видео супер полезное. Частно тут нахожу что-то для себя, спасибо! (Самоучка)
@mikhailblush5261
@mikhailblush5261 Год назад
на 8:00 чуть оговорился "два кейса, когда нужен useEffect"
@promoabys
@promoabys Год назад
Михаил, спасибо. Всё просто и понятно !!!
@user-kv9ur9hi4n
@user-kv9ur9hi4n Год назад
"один мой коллега засунул целый реакт-компонент в useCallback" - ааааа!!! господи, я думал только у нас такая дичь в проекте) как же я устал бороться с этими мамкиными оптимизаторами) спасибо, теперь кроме видоса айти синяка, буду кидать еще ваш )
@sharkman6434
@sharkman6434 Год назад
У ayub begimkulov тоже есть объяснение и оно несколько глубже даже чем тут )
@powt73sas
@powt73sas Год назад
Жёстко.
@DubinArtur
@DubinArtur 6 месяцев назад
Вы, случайно, не вместе работаете?)
@aleksprimetv
@aleksprimetv Год назад
Круто, можно про useMemo так же по полочкам разложить?)
@maxsolo6446
@maxsolo6446 Год назад
Михаил, спасибо большое! Смотрел твой бытрый курс по React Router, и тут после третьего видео RU-vid "подсунул" мне это видео. Думал не смотреть, ведь "-да что я ещё могу узнать про useCallback?", оказалось, что ключевую вещь😅. Спасибо! Теперь буду тщательно думать перед решением мемоизации сущностей🤝
@user-tk7qv9rv2c
@user-tk7qv9rv2c Год назад
Спасибо, наконец-то дошло, для чего этот хук нужен! Хотя второй вариант я использовала, благодаря подсказкам eslint(, но без понимания особого)
@artedza
@artedza Год назад
Спасибо за объяснение!
@seosspro9686
@seosspro9686 Год назад
Спасибо, все отлично объяснил
@v.demchenko
@v.demchenko Год назад
Кайф🎉 можно еще видео подробное по хукам?
@DenisBien
@DenisBien День назад
спасибо за видео!
@sankov206
@sankov206 Год назад
Привет, спасибо за видео! Наконец-то кто-то правильно объяснил, потому что все видео на эту тему содержат неправильную информацию и какие-то глупые надуманные примеры, не имеющие отношения к реальному миру.
@givgiv6688
@givgiv6688 Год назад
Спасибо за видео
@daniyarzhanakhmetov7741
@daniyarzhanakhmetov7741 Год назад
Супер, спасибо!
@andreyrudin2286
@andreyrudin2286 Год назад
спасибо, очень понятно.
@dmitryrazdobudko4914
@dmitryrazdobudko4914 Год назад
Спасибо за ролик. Очень наглядное объяснение, ибо тема действительно непонятная. Полагаю, аналогичный подход актуален и для useMemo?
@mishanep
@mishanep Год назад
C useMemo чуть сложнее. Здесь мы просто создаем функцию, не вызывая ее. А useMemo предполагает мемоизацию вычислений. Поэтому иногда данный хук нам может пригодиться, чтобы не повторять дорогих вычислений, даже если мы не планируем передавать их в другой компонент. В целом, логика с memo и использованием массивов/объектов как зависимостей для других хуков - аналогичная. Но, повторюсь, есть и другие кейсы использования.
@yaroslavzef7267
@yaroslavzef7267 3 месяца назад
Спасибо за пример про связку memo + useCallback. Такого даже чат GPT не подсказал)
@rossmanov
@rossmanov Год назад
Михаил, вы создаете очень полезный контент)
@boycovclub
@boycovclub Год назад
дану нах...?))) а я не знал)
@romanshevchenko9237
@romanshevchenko9237 7 месяцев назад
Спасибо огромное, это лучшее объяснение useCallback во всех интернетах! Но я только одного не понял - зачем линтер требует добавить logUpdate в массив зависимостей во втором примере? Какая тут логика?
@eugenekaler6048
@eugenekaler6048 Год назад
Михаил, спасибо Вам за ваши труды! С удовольствием смотрю Ваши курсы на Udemy. Планируете ли Вы какой-нибудь новый курс? Очень хотелось бы, раскрыть тему CI/CD Jenkins.
@mishanep
@mishanep Год назад
Приветствую. В настоящий момент никакой конкретики по курсам нет. Есть мысли, идеи, но нет времени. По Дженкинсу в планах ничего не было.
@anatoliiilescu839
@anatoliiilescu839 Год назад
Thanks Mihail!
@user-ok6cc6kf3w
@user-ok6cc6kf3w 8 месяцев назад
Ждем про useMemo)
@elstar7466
@elstar7466 Год назад
Есть еще коллбэк-рефы, когда функция принимает как аргумент node (dom-узел) и присваивается атрибуту ref в JSX. Используется это обычно для передачи dom-узла кастомному хуку. useRef не всегда тут может помочь, ибо useEffect на него не реагирует, а вот коллбэк-реф он увидит.
@maxsolo6446
@maxsolo6446 Год назад
Михаил, можешь сделать похожий обзор про useMemo? Понимаю, что там похожая ситуация, но всё же, возможно есть свои нюансы
@STELLS541
@STELLS541 Год назад
Очень годно))
@voytko1994
@voytko1994 Год назад
отличный урок! Сам никогда не понимал толком, знал в теории, но на практике - профан, давай еще про useMemo, в чем разница с useCallback?
@yantakushevich1014
@yantakushevich1014 Год назад
useCallback возвращает функцию, а useMemo возвращает уже готовое значение, например объект. А так, суть одна и та же - возвращать ссылку на одну и ту же сущность, если зависимости не изменились.
@romanmed9035
@romanmed9035 Год назад
если можно о useEffect но с акцентом на помещение используемой в нем функции в массив зависимостей. линтер этого требует. но вот сегодня поместил и получил кольцевую обработку. как в видео. в случае когда мы не можем поместить функцию внутрь эффекта. например она вообще берется из собственного хука.
@cybersystem5137
@cybersystem5137 День назад
У нас в конторе принято всегда оборачивать. Я уже устал спорить, поэтому просто делаю че просят )) А в целом да, знаю давно, что это шляпа каждый раз мемоизировать. Еще есть другой фетишь: юзмемо. Каждую букву заворачивают 😅
@vasiliy_konnov
@vasiliy_konnov Год назад
Очень крутой 😎👍
@askarzhaanbaev5834
@askarzhaanbaev5834 3 месяца назад
Спасибо, но я ничего не понял. Можно ещё какой нибудь пример
@cmac2cmac
@cmac2cmac Год назад
Спасибо!
@zubenkopetrovich4573
@zubenkopetrovich4573 Год назад
господа, сколько не смотрел не могу понять разницу между useMemo, useEffect, useCallback. Даже после просмотра этого видео не до конца понял всю ситуацию с useCallback. Если не сложно, можете подробно разъяснить или скинуть ссылку на какой-то источник с подробным объяснением.
@carcinogen0075
@carcinogen0075 11 месяцев назад
Забыли сказать про ментальную нагрузку) Минимальный оверхед который дает useCallback не стоит возможных проблем с производительностью в местах где забудешь обернуть в useCallback. Так что с практической точки зрения всё лепить в useCallback имеет смысл
@ALEKSEY_77737
@ALEKSEY_77737 4 месяца назад
Спасибо
@Jaaaaaamp
@Jaaaaaamp 8 месяцев назад
4:17 говорится, что обновился родитель, но чей это родитель? этот момент не понятен, может кто объяснить?
@HyndoDristalix14
@HyndoDristalix14 Год назад
Вопрос , а если мы данные вырисовываем с RTK query , то нужно ли использовать useCallback?
@HyndoDristalix14
@HyndoDristalix14 Год назад
либо React query, там же по сути автоматом кешируется все
@mishanep
@mishanep Год назад
Что конкретно вы предлагаете кэшировать с useCallback при использовании названных библиотек?
@user-hruser
@user-hruser 8 месяцев назад
Сделай такой де пример, и предавай колбэк в таблицу и посмотри как будет рендерится или нет
@petrs5567
@petrs5567 11 месяцев назад
Grand merci à vous, но обращаю внимание уважаемого автора на потенциальную оговорку 8:03: по всей видимости, вместо фразы "два кейса когда нам нужен useEffect()" имелось в виду "два кейса, когда нам нужен useCallback()"? Поправьте, если не так
@mishanep
@mishanep 11 месяцев назад
Да, всё так.
@xice111
@xice111 11 месяцев назад
видел как некоторые люди добавляют useCallback для callback отправленных в addEventListener, я так понимаю это излишне?
@mishanep
@mishanep 11 месяцев назад
Излишне. Листнеры в таком варианте обычно добавляются в эффекте, внутри которого правильно будет и сам хэндлер создать.
@weynemeynen
@weynemeynen Год назад
Два кейса когда нужен useEffect (8:03) или всё же useCallback?
@mishanep
@mishanep Год назад
useCallback
@user-vv6rr1su4m
@user-vv6rr1su4m Год назад
1е нормальное объяснеие🙏😀
@grigoriyil6400
@grigoriyil6400 Год назад
Михаил, вы волшебник. Я только учусь и вчера убил весь день на решение проблемы лишнего рендеринга. А тут ваш видосик подоспел как раз вовремя. Осталось придумать как это все состыковать с useForm :)) Спасибо вам большое за контент.
@mkhitarmuradyan4432
@mkhitarmuradyan4432 8 месяцев назад
fantastic !
@sno-oze
@sno-oze Год назад
useCallback и memo - это не бесплатно, не факт, что в попытках оптимизации, всё не стало гораздо медленнее, чем без них. Нужны пруфы, пока же видно лишь то, что нет смысла использовать на столь легковесных компонентах лишнюю оптимизацию.
@maaobzor2824
@maaobzor2824 Год назад
В первом случае хватило бы только React.memo, повторных ререндеров компоненты не происходило бы
@user-uw9xp8en3v
@user-uw9xp8en3v 4 месяца назад
Стоило сказать про преждевременную оптимизацию всё же. А то пойдут ведь добавлять useCallback+memo куда не попадя, считая, что так надо 😅
@ArtmenBoss
@ArtmenBoss Год назад
В доке еще пишут можно все кастомные хуки в useCallback оборачивать
@mishanep
@mishanep Год назад
Оно там звучит примерно как "на всякий случай". Если команда небольшая и понятно как хуки будут использоваться, то оборачивать всё подряд было бы странно. Если пишем библиотеку, то уже выглядит логично.
@user-uw9xp8en3v
@user-uw9xp8en3v 4 месяца назад
Я без доки для себя взял это правило. На самом деле тут двояко. Из плюсов - уменьшается ментальная сложность. Нам не нужно каждый раз заходить в хук и проверять, обернута ли функция, если мы ее используем в зависимостях в компоненте. Из минусов - уменьшается читаемость кода и увеличивается время написания. Немного увеличивается ментальная сложность при работе с хуком.
@TpyrBo3Db
@TpyrBo3Db Год назад
тупо лучший
@NeoCoding
@NeoCoding 6 месяцев назад
пять лет уже постоянно что-то делаю на реакт но до этого материала до сих пор не дорос..
@Neteruss
@Neteruss 6 месяцев назад
а если в Hook вынести?
@ssurrokk
@ssurrokk Год назад
залогировал бы время отработки каждого из вариантов, иначе не очевидные у тебя утверждения на самом деле про скорость работы
@michaelveselov589
@michaelveselov589 Год назад
Спасибо, Михаил, у Вас наконец-то появились нормальные коллеги. Судя по объяснению данного хука в рамках курса по Реакт, достойных и мотивирующих коллег у Вас на тот момент не было!))
@mishanep
@mishanep Год назад
В смысле мотивирующих на подобный контент?))
@michaelveselov589
@michaelveselov589 Год назад
@@mishanep Михаил, если я правильно понял предисловие, то до сегодняшнего дня у Вас были коллеги, твердо знавшие когда и в каких сочетаниях использовать useCallback))
@jamjam3337
@jamjam3337 Год назад
👏👍
@boburmustafo8868
@boburmustafo8868 Год назад
spasibo
@randomedd9102
@randomedd9102 Год назад
8:02 useCallback*
@user-hd1kz1mr5q
@user-hd1kz1mr5q Год назад
База))
@miloman1995s
@miloman1995s Год назад
а как же removeEventListener, там необходимо передавать функцию с изначальной ссылкой, и соответственно для этого мы можем callback функцию, передаваемую в addEventListener обернуть в useCallback - чтобы не потерять ссылку на нашу изначальную callback функцию)
@mishanep
@mishanep Год назад
Смотря как вы добавляете, снимаете ивенты. Как правило, это одна и та же функция, обернутая в useEffect. А значит и ссылка на функцию будет одна.
@profesor08
@profesor08 Год назад
Можно забить на useCallback, если ты передаешь свой колбек в какой-то самый простой компонент. Или когда данные, от которых он зависит, постоянно обновляются, и ты точно знаешь как он устроен внутри. А вот взаимодействие с DOM, это уже дорогая операция, это дороже чем инициализировать функцию, и чем 10 функций. А еще очень часто есть много готовых компонентов и компонентов из сторонних модулей, и как на это повлияет использование useCallback, заранее не известно. А выстрелить это может в самый неподходящий момент, заблокировать юзеру страницу, сожрать всю память или вылететь с переполнением стека вызовов. По этому, из соображений безопасности и здравого смысла, использовать useCallback надо для каждой объявленной внутри компонента функции, которая зависит от данных в этом компоненте. В противном случае ей там делать нечего, и она должна быть объявлена вне компонента.
@szxxi
@szxxi Год назад
Ну вот эти слова про "дорогую операцию" ничем не подкрепленные, вообще не айс. Сам то проверял или так просто, услышал от кого-то, кто сам услышал от кого-то и т.д., и так вы просто повторяете бездумно друг за другом? Что там с holy js кстати, едешь/не едешь?
@alext5030
@alext5030 10 месяцев назад
Типичное поведение практически всех современных программистов, в т.ч. высокого уровня - это слепое следование каким-либо догмам, не пытаясь разобраться, насколько они актуальны и в каких случаях. Туда же ничем не подкрепленные заявления о низкой / высокой производительности, бесконечная битва с ререндерами (в SPA), бОльшая часть которых на производительность с позиции end user влияет практически... никак. А потом имеем глючное нечто типа сайта Озона (там Vue, но в данном случае это иррелевантно) с вот уже годами (периодически) отваливающейся фильтрацией. Таковы реалии современного программирования "по фэн-шую".
@user-uw9xp8en3v
@user-uw9xp8en3v 4 месяца назад
Тут скорее дело не в том, дорогая операция или нет. Это в любом случае профилировать надо тогда. Оптимизация просто не нужна, если нет видимых проблем с перформансом. А оптимизация не бесплатна больше в плане то, что мы пишем лишний код/обертки, увеличиваем ментальную сложность. Пускай мы даже ускорили работу компонента, если в реальном использовании этого не видно, это нет смысл.
@darkside2436
@darkside2436 Год назад
Преждевременная оптимизация хуже чем никакая оптимизация вовсе.
@iiiyx
@iiiyx 2 месяца назад
Автору и некоторым комментаторам не мешало бы мат часть подтянуть. Не так страшен ререндер, сколько перемонтирование в дом. Вот так насмотрятся таких видео, а потом удивляются, почему у них грид или тейбл тормозят, как отложения мамонта.
@lesters
@lesters Год назад
спасибо очень полезная инфа что он юзается в тандеме с мемо
@ice_rd
@ice_rd Год назад
Почему во Vue все так просто и лаконично. Нужно действие - кидай в экшен, нужно вычисление + кэш - используй компьютед. В React такие сложности из колбека, мемо и рефов ... 🥲
@user-td3bz8st6v
@user-td3bz8st6v Год назад
Сам то же сравнивал и пришел к таким же выводам. Неоправданно все усложнено!!!
@PowWowVideo
@PowWowVideo Год назад
В реакте ТОЛЬКО 3-4 хука, которые надо заучить и правильно использовать и ВСЁ:) Какие сложности ?
@ReAgent003
@ReAgent003 Год назад
Согласен, реакт запутанный и в нём есть высокий риск уронить производительность. А Свелте, как и вью, проще в этом плане. Вот доклад на эту тему ru-vid.combB-R_lOlTLE?feature=share&t=744
@xeleos
@xeleos Год назад
согласен. В реакте на простейшие оптимизации надо тратить кучу времени, а во вью подход совершенно иной, там функции итак создаются 1 раз, поэтому ничего такого не надо.
@user-td3bz8st6v
@user-td3bz8st6v Год назад
@@PowWowVideo Согласен, хуков не много, но их часто используют для создания кастомных хуков, и потом с этим разбираться надо). Сложности в том что из коробки в React все таки меньше чем в том же Vue. Много нужно самому дописывать
Далее
React 15: Хук useMemo и useCallback
13:38
Просмотров 25 тыс.
МЯСНОЙ ЦЕХ - Страшилки Minecraft
37:24
МАЛОЙ ШАНТАЖИСТ
00:34
Просмотров 78 тыс.
КАК GOOGLE УКРАЛ ANDROID?
17:44
Просмотров 60 тыс.
ПК с Авито за 3000р
0:58
Просмотров 1,6 млн
How charged your battery?
0:14
Просмотров 2,8 млн
Power up all cell phones.
0:17
Просмотров 49 млн
Плохие и хорошие видеокарты
1:00
Крохотный и быстрый SSD на 2 ТБ
0:59