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

  Рет қаралды 39,047

Михаил Непомнящий

Михаил Непомнящий

Жыл бұрын

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

Пікірлер: 106
@user-bp7jb5of5d
@user-bp7jb5of5d Жыл бұрын
Михаил, спасибо за видео. Как всегда на высоте. Сложные вещи простым языком. Было очень полезно послушать про правильное использование useCallback
@mikhailblush5261
@mikhailblush5261 Жыл бұрын
на 8:00 чуть оговорился "два кейса, когда нужен useEffect"
@IvanZakharanka
@IvanZakharanka Жыл бұрын
Как всегда отлично! Спасибо! А еще я прям офигел насколько хороша новая дока React 😯
@necelentano
@necelentano Жыл бұрын
Спасибо Михаил! Полезное видео 👍
@sphinxenen
@sphinxenen Жыл бұрын
Просто супер доступно объяснил. Спасибо большое!!!
@anonlog
@anonlog Жыл бұрын
Михаил, спасибо вам за разъяснение useCallback, его лепят везде где нужно и не нужно и никто не понимает особо, зачем он нужен)) Теперь за 8 минут вашего видео все стало на свои места!! От вас контент просто бесценный!!))☺👍 Лайк однозначно!))
@vladislav_pikiner
@vladislav_pikiner 11 ай бұрын
спасибо за сложные темы простым языком)
@unknownWakeborder
@unknownWakeborder Жыл бұрын
Очень полезный материал получился, спасибо!
@mrakobes3736
@mrakobes3736 Жыл бұрын
Отличное объяснение, спасибо!
@user-vm2db5cq1g
@user-vm2db5cq1g Жыл бұрын
Михаил как всегда отличное видео и понятное! Спасибо
@SkyAndStarss
@SkyAndStarss 10 ай бұрын
отлично, очень ясное видение ситуации, спасибо!
@user-jl7vr6xy7g
@user-jl7vr6xy7g 10 ай бұрын
Михаил, это были очень познавательные 8 минут)) Спасибо, наконец-то всё по полочкам с useCallback. На проектах все, в том числе я, его использовали неправильно.
@OlegSas
@OlegSas Жыл бұрын
Михаил, спасибо большое! Просто, понятно, интересно.
@user-be7cz1ml1j
@user-be7cz1ml1j 10 ай бұрын
До этого видео я не мог понять для чего useCallback и как ей воообще пользоваться. Видео супер полезное. Частно тут нахожу что-то для себя, спасибо! (Самоучка)
@olegsh2888
@olegsh2888 Жыл бұрын
Михаил, это огонь! У меня коллеги тоже любят обернуть банальное сравнение 2х переменных в мемоизацию, не парясь, что мемоизация сильно дороже элементарного сравнения 2х примитивов) нужен баланс между «я вообще ничего не знаю про мемоизацию» и «я мемоизирую каждый чих»
@ivmerk
@ivmerk 19 сағат бұрын
доходчиво, спасибо за труды..
@serjdenisov2114
@serjdenisov2114 Жыл бұрын
Михаил, спасибо за информацию!!!
@promoabys
@promoabys Жыл бұрын
Михаил, спасибо. Всё просто и понятно !!!
@aleksprimetv
@aleksprimetv Жыл бұрын
Круто, можно про useMemo так же по полочкам разложить?)
@lexymenshicov5278
@lexymenshicov5278 2 ай бұрын
Спасибо большое за видео, очень качественно всё поясняется
@artedza
@artedza Жыл бұрын
Спасибо за объяснение!
@tofidndndkkdkwkqe7017
@tofidndndkkdkwkqe7017 2 ай бұрын
Определенно отличное видео, спасибо!!
@seosspro9686
@seosspro9686 Жыл бұрын
Спасибо, все отлично объяснил
@DenisBien
@DenisBien 27 күн бұрын
спасибо за видео!
@anatoliiilescu839
@anatoliiilescu839 Жыл бұрын
Thanks Mihail!
@givgiv6688
@givgiv6688 Жыл бұрын
Спасибо за видео
@maxsolo6446
@maxsolo6446 Жыл бұрын
Михаил, спасибо большое! Смотрел твой бытрый курс по React Router, и тут после третьего видео KZfaq "подсунул" мне это видео. Думал не смотреть, ведь "-да что я ещё могу узнать про useCallback?", оказалось, что ключевую вещь😅. Спасибо! Теперь буду тщательно думать перед решением мемоизации сущностей🤝
@daniyarzhanakhmetov7741
@daniyarzhanakhmetov7741 Жыл бұрын
Супер, спасибо!
@user-tk7qv9rv2c
@user-tk7qv9rv2c Жыл бұрын
Спасибо, наконец-то дошло, для чего этот хук нужен! Хотя второй вариант я использовала, благодаря подсказкам eslint(, но без понимания особого)
@Kotovar
@Kotovar 20 күн бұрын
Большое спасибо:)
@serious_psychologist
@serious_psychologist Жыл бұрын
спасибо, очень понятно.
@v.demchenko
@v.demchenko Жыл бұрын
Кайф🎉 можно еще видео подробное по хукам?
@sankov206
@sankov206 Жыл бұрын
Привет, спасибо за видео! Наконец-то кто-то правильно объяснил, потому что все видео на эту тему содержат неправильную информацию и какие-то глупые надуманные примеры, не имеющие отношения к реальному миру.
@user-kv9ur9hi4n
@user-kv9ur9hi4n Жыл бұрын
"один мой коллега засунул целый реакт-компонент в useCallback" - ааааа!!! господи, я думал только у нас такая дичь в проекте) как же я устал бороться с этими мамкиными оптимизаторами) спасибо, теперь кроме видоса айти синяка, буду кидать еще ваш )
@sharkman6434
@sharkman6434 Жыл бұрын
У ayub begimkulov тоже есть объяснение и оно несколько глубже даже чем тут )
@powt73sas
@powt73sas Жыл бұрын
Жёстко.
@DubinArtur
@DubinArtur 7 ай бұрын
Вы, случайно, не вместе работаете?)
@cmac2cmac
@cmac2cmac Жыл бұрын
Спасибо!
@yaroslavzef7267
@yaroslavzef7267 4 ай бұрын
Спасибо за пример про связку memo + useCallback. Такого даже чат GPT не подсказал)
@STELLS541
@STELLS541 Жыл бұрын
Очень годно))
@rossmanov
@rossmanov Жыл бұрын
Михаил, вы создаете очень полезный контент)
@boycovclub
@boycovclub Жыл бұрын
дану нах...?))) а я не знал)
@ALEKSEY_77737
@ALEKSEY_77737 5 ай бұрын
Спасибо
@vasiliy_konnov
@vasiliy_konnov Жыл бұрын
Очень крутой 😎👍
@user-ok6cc6kf3w
@user-ok6cc6kf3w 9 ай бұрын
Ждем про useMemo)
@eugenekaler6048
@eugenekaler6048 Жыл бұрын
Михаил, спасибо Вам за ваши труды! С удовольствием смотрю Ваши курсы на Udemy. Планируете ли Вы какой-нибудь новый курс? Очень хотелось бы, раскрыть тему CI/CD Jenkins.
@mishanep
@mishanep Жыл бұрын
Приветствую. В настоящий момент никакой конкретики по курсам нет. Есть мысли, идеи, но нет времени. По Дженкинсу в планах ничего не было.
@elstar7466
@elstar7466 Жыл бұрын
Есть еще коллбэк-рефы, когда функция принимает как аргумент node (dom-узел) и присваивается атрибуту ref в JSX. Используется это обычно для передачи dom-узла кастомному хуку. useRef не всегда тут может помочь, ибо useEffect на него не реагирует, а вот коллбэк-реф он увидит.
@maxsolo6446
@maxsolo6446 Жыл бұрын
Михаил, можешь сделать похожий обзор про useMemo? Понимаю, что там похожая ситуация, но всё же, возможно есть свои нюансы
@dmitryrazdobudko4914
@dmitryrazdobudko4914 Жыл бұрын
Спасибо за ролик. Очень наглядное объяснение, ибо тема действительно непонятная. Полагаю, аналогичный подход актуален и для useMemo?
@mishanep
@mishanep Жыл бұрын
C useMemo чуть сложнее. Здесь мы просто создаем функцию, не вызывая ее. А useMemo предполагает мемоизацию вычислений. Поэтому иногда данный хук нам может пригодиться, чтобы не повторять дорогих вычислений, даже если мы не планируем передавать их в другой компонент. В целом, логика с memo и использованием массивов/объектов как зависимостей для других хуков - аналогичная. Но, повторюсь, есть и другие кейсы использования.
@romanmed9035
@romanmed9035 Жыл бұрын
если можно о useEffect но с акцентом на помещение используемой в нем функции в массив зависимостей. линтер этого требует. но вот сегодня поместил и получил кольцевую обработку. как в видео. в случае когда мы не можем поместить функцию внутрь эффекта. например она вообще берется из собственного хука.
@romanshevchenko9237
@romanshevchenko9237 8 ай бұрын
Спасибо огромное, это лучшее объяснение useCallback во всех интернетах! Но я только одного не понял - зачем линтер требует добавить logUpdate в массив зависимостей во втором примере? Какая тут логика?
@mkhitarmuradyan4432
@mkhitarmuradyan4432 9 ай бұрын
fantastic !
@voytko1994
@voytko1994 Жыл бұрын
отличный урок! Сам никогда не понимал толком, знал в теории, но на практике - профан, давай еще про useMemo, в чем разница с useCallback?
@yantakushevich1014
@yantakushevich1014 Жыл бұрын
useCallback возвращает функцию, а useMemo возвращает уже готовое значение, например объект. А так, суть одна и та же - возвращать ссылку на одну и ту же сущность, если зависимости не изменились.
@user-vv6rr1su4m
@user-vv6rr1su4m Жыл бұрын
1е нормальное объяснеие🙏😀
@user-hruser
@user-hruser 9 ай бұрын
Сделай такой де пример, и предавай колбэк в таблицу и посмотри как будет рендерится или нет
@carcinogen0075
@carcinogen0075 11 ай бұрын
Забыли сказать про ментальную нагрузку) Минимальный оверхед который дает useCallback не стоит возможных проблем с производительностью в местах где забудешь обернуть в useCallback. Так что с практической точки зрения всё лепить в useCallback имеет смысл
@askarzhaanbaev5834
@askarzhaanbaev5834 4 ай бұрын
Спасибо, но я ничего не понял. Можно ещё какой нибудь пример
@Jaaaaaamp
@Jaaaaaamp 9 ай бұрын
4:17 говорится, что обновился родитель, но чей это родитель? этот момент не понятен, может кто объяснить?
@jamjam3337
@jamjam3337 Жыл бұрын
👏👍
@cybersystem5137
@cybersystem5137 27 күн бұрын
У нас в конторе принято всегда оборачивать. Я уже устал спорить, поэтому просто делаю че просят )) А в целом да, знаю давно, что это шляпа каждый раз мемоизировать. Еще есть другой фетишь: юзмемо. Каждую букву заворачивают 😅
@HyndoDristalix14
@HyndoDristalix14 Жыл бұрын
Вопрос , а если мы данные вырисовываем с RTK query , то нужно ли использовать useCallback?
@HyndoDristalix14
@HyndoDristalix14 Жыл бұрын
либо React query, там же по сути автоматом кешируется все
@mishanep
@mishanep Жыл бұрын
Что конкретно вы предлагаете кэшировать с useCallback при использовании названных библиотек?
@maaobzor2824
@maaobzor2824 Жыл бұрын
В первом случае хватило бы только React.memo, повторных ререндеров компоненты не происходило бы
@boburmustafo8868
@boburmustafo8868 Жыл бұрын
spasibo
@zubenkopetrovich4573
@zubenkopetrovich4573 Жыл бұрын
господа, сколько не смотрел не могу понять разницу между useMemo, useEffect, useCallback. Даже после просмотра этого видео не до конца понял всю ситуацию с useCallback. Если не сложно, можете подробно разъяснить или скинуть ссылку на какой-то источник с подробным объяснением.
@ArtmenBoss
@ArtmenBoss Жыл бұрын
В доке еще пишут можно все кастомные хуки в useCallback оборачивать
@mishanep
@mishanep Жыл бұрын
Оно там звучит примерно как "на всякий случай". Если команда небольшая и понятно как хуки будут использоваться, то оборачивать всё подряд было бы странно. Если пишем библиотеку, то уже выглядит логично.
@user-uw9xp8en3v
@user-uw9xp8en3v 5 ай бұрын
Я без доки для себя взял это правило. На самом деле тут двояко. Из плюсов - уменьшается ментальная сложность. Нам не нужно каждый раз заходить в хук и проверять, обернута ли функция, если мы ее используем в зависимостях в компоненте. Из минусов - уменьшается читаемость кода и увеличивается время написания. Немного увеличивается ментальная сложность при работе с хуком.
@weynemeynen
@weynemeynen Жыл бұрын
Два кейса когда нужен useEffect (8:03) или всё же useCallback?
@mishanep
@mishanep Жыл бұрын
useCallback
@TpyrBo3Db
@TpyrBo3Db Жыл бұрын
тупо лучший
@petrs5567
@petrs5567 Жыл бұрын
Grand merci à vous, но обращаю внимание уважаемого автора на потенциальную оговорку 8:03: по всей видимости, вместо фразы "два кейса когда нам нужен useEffect()" имелось в виду "два кейса, когда нам нужен useCallback()"? Поправьте, если не так
@mishanep
@mishanep Жыл бұрын
Да, всё так.
@grigoriyil6400
@grigoriyil6400 Жыл бұрын
Михаил, вы волшебник. Я только учусь и вчера убил весь день на решение проблемы лишнего рендеринга. А тут ваш видосик подоспел как раз вовремя. Осталось придумать как это все состыковать с useForm :)) Спасибо вам большое за контент.
@Neteruss
@Neteruss 7 ай бұрын
а если в Hook вынести?
@xice111
@xice111 Жыл бұрын
видел как некоторые люди добавляют useCallback для callback отправленных в addEventListener, я так понимаю это излишне?
@mishanep
@mishanep Жыл бұрын
Излишне. Листнеры в таком варианте обычно добавляются в эффекте, внутри которого правильно будет и сам хэндлер создать.
@user-uw9xp8en3v
@user-uw9xp8en3v 5 ай бұрын
Стоило сказать про преждевременную оптимизацию всё же. А то пойдут ведь добавлять useCallback+memo куда не попадя, считая, что так надо 😅
@randomedd9102
@randomedd9102 Жыл бұрын
8:02 useCallback*
@michaelveselov589
@michaelveselov589 Жыл бұрын
Спасибо, Михаил, у Вас наконец-то появились нормальные коллеги. Судя по объяснению данного хука в рамках курса по Реакт, достойных и мотивирующих коллег у Вас на тот момент не было!))
@mishanep
@mishanep Жыл бұрын
В смысле мотивирующих на подобный контент?))
@michaelveselov589
@michaelveselov589 Жыл бұрын
@@mishanep Михаил, если я правильно понял предисловие, то до сегодняшнего дня у Вас были коллеги, твердо знавшие когда и в каких сочетаниях использовать useCallback))
@ssurrokk
@ssurrokk Жыл бұрын
залогировал бы время отработки каждого из вариантов, иначе не очевидные у тебя утверждения на самом деле про скорость работы
@NeoCoding
@NeoCoding 7 ай бұрын
пять лет уже постоянно что-то делаю на реакт но до этого материала до сих пор не дорос..
@sno-oze
@sno-oze Жыл бұрын
useCallback и memo - это не бесплатно, не факт, что в попытках оптимизации, всё не стало гораздо медленнее, чем без них. Нужны пруфы, пока же видно лишь то, что нет смысла использовать на столь легковесных компонентах лишнюю оптимизацию.
@user-hd1kz1mr5q
@user-hd1kz1mr5q Жыл бұрын
База))
@miloman1995s
@miloman1995s Жыл бұрын
а как же removeEventListener, там необходимо передавать функцию с изначальной ссылкой, и соответственно для этого мы можем callback функцию, передаваемую в addEventListener обернуть в useCallback - чтобы не потерять ссылку на нашу изначальную callback функцию)
@mishanep
@mishanep Жыл бұрын
Смотря как вы добавляете, снимаете ивенты. Как правило, это одна и та же функция, обернутая в useEffect. А значит и ссылка на функцию будет одна.
@profesor08
@profesor08 Жыл бұрын
Можно забить на useCallback, если ты передаешь свой колбек в какой-то самый простой компонент. Или когда данные, от которых он зависит, постоянно обновляются, и ты точно знаешь как он устроен внутри. А вот взаимодействие с DOM, это уже дорогая операция, это дороже чем инициализировать функцию, и чем 10 функций. А еще очень часто есть много готовых компонентов и компонентов из сторонних модулей, и как на это повлияет использование useCallback, заранее не известно. А выстрелить это может в самый неподходящий момент, заблокировать юзеру страницу, сожрать всю память или вылететь с переполнением стека вызовов. По этому, из соображений безопасности и здравого смысла, использовать useCallback надо для каждой объявленной внутри компонента функции, которая зависит от данных в этом компоненте. В противном случае ей там делать нечего, и она должна быть объявлена вне компонента.
@sergey_zatsepin
@sergey_zatsepin Жыл бұрын
Ну вот эти слова про "дорогую операцию" ничем не подкрепленные, вообще не айс. Сам то проверял или так просто, услышал от кого-то, кто сам услышал от кого-то и т.д., и так вы просто повторяете бездумно друг за другом? Что там с holy js кстати, едешь/не едешь?
@alext5030
@alext5030 11 ай бұрын
Типичное поведение практически всех современных программистов, в т.ч. высокого уровня - это слепое следование каким-либо догмам, не пытаясь разобраться, насколько они актуальны и в каких случаях. Туда же ничем не подкрепленные заявления о низкой / высокой производительности, бесконечная битва с ререндерами (в SPA), бОльшая часть которых на производительность с позиции end user влияет практически... никак. А потом имеем глючное нечто типа сайта Озона (там Vue, но в данном случае это иррелевантно) с вот уже годами (периодически) отваливающейся фильтрацией. Таковы реалии современного программирования "по фэн-шую".
@user-uw9xp8en3v
@user-uw9xp8en3v 5 ай бұрын
Тут скорее дело не в том, дорогая операция или нет. Это в любом случае профилировать надо тогда. Оптимизация просто не нужна, если нет видимых проблем с перформансом. А оптимизация не бесплатна больше в плане то, что мы пишем лишний код/обертки, увеличиваем ментальную сложность. Пускай мы даже ускорили работу компонента, если в реальном использовании этого не видно, это нет смысл.
@darkside2436
@darkside2436 Жыл бұрын
Преждевременная оптимизация хуже чем никакая оптимизация вовсе.
@iiiyx
@iiiyx 3 ай бұрын
Автору и некоторым комментаторам не мешало бы мат часть подтянуть. Не так страшен ререндер, сколько перемонтирование в дом. Вот так насмотрятся таких видео, а потом удивляются, почему у них грид или тейбл тормозят, как отложения мамонта.
@Garry_Levin
@Garry_Levin 9 күн бұрын
Ролик может и неплохой, но без исходного текста не имеет никакого смысла. Дизлайк.
@lesters
@lesters Жыл бұрын
спасибо очень полезная инфа что он юзается в тандеме с мемо
@ice_rd
@ice_rd Жыл бұрын
Почему во Vue все так просто и лаконично. Нужно действие - кидай в экшен, нужно вычисление + кэш - используй компьютед. В React такие сложности из колбека, мемо и рефов ... 🥲
@user-td3bz8st6v
@user-td3bz8st6v Жыл бұрын
Сам то же сравнивал и пришел к таким же выводам. Неоправданно все усложнено!!!
@PowWowVideo
@PowWowVideo Жыл бұрын
В реакте ТОЛЬКО 3-4 хука, которые надо заучить и правильно использовать и ВСЁ:) Какие сложности ?
@ReAgent003
@ReAgent003 Жыл бұрын
Согласен, реакт запутанный и в нём есть высокий риск уронить производительность. А Свелте, как и вью, проще в этом плане. Вот доклад на эту тему kzfaq.infobB-R_lOlTLE?feature=share&t=744
@xeleos
@xeleos Жыл бұрын
согласен. В реакте на простейшие оптимизации надо тратить кучу времени, а во вью подход совершенно иной, там функции итак создаются 1 раз, поэтому ничего такого не надо.
@user-td3bz8st6v
@user-td3bz8st6v Жыл бұрын
@@PowWowVideo Согласен, хуков не много, но их часто используют для создания кастомных хуков, и потом с этим разбираться надо). Сложности в том что из коробки в React все таки меньше чем в том же Vue. Много нужно самому дописывать
Что вы знаете о useCallback?
10:02
АйТи Синяк
Рет қаралды 47 М.
Оператор запятая в JavaScript #javascript
0:48
Михаил Непомнящий
Рет қаралды 10 М.
터키아이스크림🇹🇷🍦Turkish ice cream #funny #shorts
00:26
Byungari 병아리언니
Рет қаралды 26 МЛН
FOOLED THE GUARD🤢
00:54
INO
Рет қаралды 62 МЛН
The joker's house has been invaded by a pseudo-human#joker #shorts
00:39
Untitled Joker
Рет қаралды 10 МЛН
Кастомные React-Хуки, useToggle, useLocalStorage
22:20
Михаил Непомнящий
Рет қаралды 18 М.
Асинхронная работа с Redux Toolkit и createAsyncThunk
42:24
Михаил Непомнящий
Рет қаралды 102 М.
#3: React Hooks - useRef
27:52
Archakov Blog
Рет қаралды 64 М.
Телефон в воде 🤯
0:28
FATA MORGANA
Рет қаралды 1,2 МЛН
Cadiz smart lock official account unlocks the aesthetics of returning home
0:30
Lid hologram 3d
0:32
LEDG
Рет қаралды 8 МЛН
Asus  VivoBook Винда за 8 часов!
1:00
Sergey Delaisy
Рет қаралды 1,1 МЛН
1$ vs 500$ ВИРТУАЛЬНАЯ РЕАЛЬНОСТЬ !
23:20
GoldenBurst
Рет қаралды 1,2 МЛН