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

  Рет қаралды 44,683

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

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

Күн бұрын

Пікірлер: 105
@anonlog
@anonlog Жыл бұрын
Михаил, спасибо вам за разъяснение useCallback, его лепят везде где нужно и не нужно и никто не понимает особо, зачем он нужен)) Теперь за 8 минут вашего видео все стало на свои места!! От вас контент просто бесценный!!))☺👍 Лайк однозначно!))
@НиколайМиров-т3т
@НиколайМиров-т3т Жыл бұрын
До этого видео я не мог понять для чего useCallback и как ей воообще пользоваться. Видео супер полезное. Частно тут нахожу что-то для себя, спасибо! (Самоучка)
@olegsh2888
@olegsh2888 Жыл бұрын
Михаил, это огонь! У меня коллеги тоже любят обернуть банальное сравнение 2х переменных в мемоизацию, не парясь, что мемоизация сильно дороже элементарного сравнения 2х примитивов) нужен баланс между «я вообще ничего не знаю про мемоизацию» и «я мемоизирую каждый чих»
@vladislav_pikiner
@vladislav_pikiner Жыл бұрын
спасибо за сложные темы простым языком)
@tanyaDreamer
@tanyaDreamer Жыл бұрын
Михаил, это были очень познавательные 8 минут)) Спасибо, наконец-то всё по полочкам с useCallback. На проектах все, в том числе я, его использовали неправильно.
@АндрейСорокин-ь6ъ
@АндрейСорокин-ь6ъ Жыл бұрын
"один мой коллега засунул целый реакт-компонент в useCallback" - ааааа!!! господи, я думал только у нас такая дичь в проекте) как же я устал бороться с этими мамкиными оптимизаторами) спасибо, теперь кроме видоса айти синяка, буду кидать еще ваш )
@sharkman6434
@sharkman6434 Жыл бұрын
У ayub begimkulov тоже есть объяснение и оно несколько глубже даже чем тут )
@powt73sas
@powt73sas Жыл бұрын
Жёстко.
@DubinArtur
@DubinArtur Жыл бұрын
Вы, случайно, не вместе работаете?)
@yaroslavzef7267
@yaroslavzef7267 9 ай бұрын
Спасибо за пример про связку memo + useCallback. Такого даже чат GPT не подсказал)
@mr_Fr0xman
@mr_Fr0xman Жыл бұрын
Михаил, спасибо большое! Смотрел твой бытрый курс по React Router, и тут после третьего видео KZbin "подсунул" мне это видео. Думал не смотреть, ведь "-да что я ещё могу узнать про useCallback?", оказалось, что ключевую вещь😅. Спасибо! Теперь буду тщательно думать перед решением мемоизации сущностей🤝
@sankov206
@sankov206 Жыл бұрын
Привет, спасибо за видео! Наконец-то кто-то правильно объяснил, потому что все видео на эту тему содержат неправильную информацию и какие-то глупые надуманные примеры, не имеющие отношения к реальному миру.
@sphinxik
@sphinxik Жыл бұрын
Просто супер доступно объяснил. Спасибо большое!!!
@necelentano
@necelentano Жыл бұрын
Спасибо Михаил! Полезное видео 👍
@АлексейСтепанов-к9о
@АлексейСтепанов-к9о Жыл бұрын
Михаил, спасибо за видео. Как всегда на высоте. Сложные вещи простым языком. Было очень полезно послушать про правильное использование useCallback
@mrakobes3736
@mrakobes3736 Жыл бұрын
Отличное объяснение, спасибо!
@SkyAndStarss
@SkyAndStarss Жыл бұрын
отлично, очень ясное видение ситуации, спасибо!
@mikhailblush5261
@mikhailblush5261 Жыл бұрын
на 8:00 чуть оговорился "два кейса, когда нужен useEffect"
@YaniaRZ
@YaniaRZ Жыл бұрын
Спасибо, наконец-то дошло, для чего этот хук нужен! Хотя второй вариант я использовала, благодаря подсказкам eslint(, но без понимания особого)
@lexymenshicov5278
@lexymenshicov5278 7 ай бұрын
Спасибо большое за видео, очень качественно всё поясняется
@promoabys
@promoabys Жыл бұрын
Михаил, спасибо. Всё просто и понятно !!!
@АнатолийГорбов-о1ь
@АнатолийГорбов-о1ь Жыл бұрын
Михаил как всегда отличное видео и понятное! Спасибо
@OlegSas
@OlegSas Жыл бұрын
Михаил, спасибо большое! Просто, понятно, интересно.
@ivmerk
@ivmerk 4 ай бұрын
доходчиво, спасибо за труды..
@aleksprimetv
@aleksprimetv Жыл бұрын
Круто, можно про useMemo так же по полочкам разложить?)
@unknownWakeborder
@unknownWakeborder Жыл бұрын
Очень полезный материал получился, спасибо!
@rossmanov
@rossmanov Жыл бұрын
Михаил, вы создаете очень полезный контент)
@serjdenisov2114
@serjdenisov2114 Жыл бұрын
Михаил, спасибо за информацию!!!
@askarzhaanbaev5834
@askarzhaanbaev5834 9 ай бұрын
Спасибо, но я ничего не понял. Можно ещё какой нибудь пример
@cybersystem5137
@cybersystem5137 5 ай бұрын
У нас в конторе принято всегда оборачивать. Я уже устал спорить, поэтому просто делаю че просят )) А в целом да, знаю давно, что это шляпа каждый раз мемоизировать. Еще есть другой фетишь: юзмемо. Каждую букву заворачивают 😅
@artedza
@artedza Жыл бұрын
Спасибо за объяснение!
@elstar7466
@elstar7466 Жыл бұрын
Есть еще коллбэк-рефы, когда функция принимает как аргумент node (dom-узел) и присваивается атрибуту ref в JSX. Используется это обычно для передачи dom-узла кастомному хуку. useRef не всегда тут может помочь, ибо useEffect на него не реагирует, а вот коллбэк-реф он увидит.
@MasterHobbitLoL
@MasterHobbitLoL 4 ай бұрын
Спасибо, отличное видео
@carcinogen0075
@carcinogen0075 Жыл бұрын
Забыли сказать про ментальную нагрузку) Минимальный оверхед который дает useCallback не стоит возможных проблем с производительностью в местах где забудешь обернуть в useCallback. Так что с практической точки зрения всё лепить в useCallback имеет смысл
@v.demchenko
@v.demchenko Жыл бұрын
Кайф🎉 можно еще видео подробное по хукам?
@seosspro9686
@seosspro9686 Жыл бұрын
Спасибо, все отлично объяснил
@romanshevchenko9237
@romanshevchenko9237 Жыл бұрын
Спасибо огромное, это лучшее объяснение useCallback во всех интернетах! Но я только одного не понял - зачем линтер требует добавить logUpdate в массив зависимостей во втором примере? Какая тут логика?
@grigoriyil6400
@grigoriyil6400 Жыл бұрын
Михаил, вы волшебник. Я только учусь и вчера убил весь день на решение проблемы лишнего рендеринга. А тут ваш видосик подоспел как раз вовремя. Осталось придумать как это все состыковать с useForm :)) Спасибо вам большое за контент.
@Kotovar
@Kotovar 5 ай бұрын
Большое спасибо:)
@dmitryrazdobudko4914
@dmitryrazdobudko4914 Жыл бұрын
Спасибо за ролик. Очень наглядное объяснение, ибо тема действительно непонятная. Полагаю, аналогичный подход актуален и для useMemo?
@mishanep
@mishanep Жыл бұрын
C useMemo чуть сложнее. Здесь мы просто создаем функцию, не вызывая ее. А useMemo предполагает мемоизацию вычислений. Поэтому иногда данный хук нам может пригодиться, чтобы не повторять дорогих вычислений, даже если мы не планируем передавать их в другой компонент. В целом, логика с memo и использованием массивов/объектов как зависимостей для других хуков - аналогичная. Но, повторюсь, есть и другие кейсы использования.
@mr_Fr0xman
@mr_Fr0xman Жыл бұрын
Михаил, можешь сделать похожий обзор про useMemo? Понимаю, что там похожая ситуация, но всё же, возможно есть свои нюансы
@SvetlanaSiakina
@SvetlanaSiakina Ай бұрын
Возражение: в официальной документациии написано useCallback is a React Hook that lets you cache a function definition between re-renders. Это выглядит не как то, что озвучили вы говоря: Каждый ререндер у нас будет создаваться та де самая функция на 1: 45 - только ссылка сохранится.
@eugenekaler6048
@eugenekaler6048 Жыл бұрын
Михаил, спасибо Вам за ваши труды! С удовольствием смотрю Ваши курсы на Udemy. Планируете ли Вы какой-нибудь новый курс? Очень хотелось бы, раскрыть тему CI/CD Jenkins.
@mishanep
@mishanep Жыл бұрын
Приветствую. В настоящий момент никакой конкретики по курсам нет. Есть мысли, идеи, но нет времени. По Дженкинсу в планах ничего не было.
@СултанбиЖолдыбай
@СултанбиЖолдыбай Жыл бұрын
Ждем про useMemo)
@NeoCoding
@NeoCoding Жыл бұрын
пять лет уже постоянно что-то делаю на реакт но до этого материала до сих пор не дорос..
@romanmed9035
@romanmed9035 Жыл бұрын
если можно о useEffect но с акцентом на помещение используемой в нем функции в массив зависимостей. линтер этого требует. но вот сегодня поместил и получил кольцевую обработку. как в видео. в случае когда мы не можем поместить функцию внутрь эффекта. например она вообще берется из собственного хука.
@rudinandrey
@rudinandrey Жыл бұрын
спасибо, очень понятно.
@sno-oze
@sno-oze Жыл бұрын
useCallback и memo - это не бесплатно, не факт, что в попытках оптимизации, всё не стало гораздо медленнее, чем без них. Нужны пруфы, пока же видно лишь то, что нет смысла использовать на столь легковесных компонентах лишнюю оптимизацию.
@michaelveselov589
@michaelveselov589 Жыл бұрын
Спасибо, Михаил, у Вас наконец-то появились нормальные коллеги. Судя по объяснению данного хука в рамках курса по Реакт, достойных и мотивирующих коллег у Вас на тот момент не было!))
@mishanep
@mishanep Жыл бұрын
В смысле мотивирующих на подобный контент?))
@michaelveselov589
@michaelveselov589 Жыл бұрын
@@mishanep Михаил, если я правильно понял предисловие, то до сегодняшнего дня у Вас были коллеги, твердо знавшие когда и в каких сочетаниях использовать useCallback))
@daniyarzhanakhmetov7741
@daniyarzhanakhmetov7741 Жыл бұрын
Супер, спасибо!
@anatoliiilescu839
@anatoliiilescu839 Жыл бұрын
Thanks Mihail!
@voytko1994
@voytko1994 Жыл бұрын
отличный урок! Сам никогда не понимал толком, знал в теории, но на практике - профан, давай еще про useMemo, в чем разница с useCallback?
@yantakushevich1014
@yantakushevich1014 Жыл бұрын
useCallback возвращает функцию, а useMemo возвращает уже готовое значение, например объект. А так, суть одна и та же - возвращать ссылку на одну и ту же сущность, если зависимости не изменились.
@givgiv6688
@givgiv6688 Жыл бұрын
Спасибо за видео
@xice111
@xice111 Жыл бұрын
видел как некоторые люди добавляют useCallback для callback отправленных в addEventListener, я так понимаю это излишне?
@mishanep
@mishanep Жыл бұрын
Излишне. Листнеры в таком варианте обычно добавляются в эффекте, внутри которого правильно будет и сам хэндлер создать.
@user-hruser
@user-hruser Жыл бұрын
Сделай такой де пример, и предавай колбэк в таблицу и посмотри как будет рендерится или нет
@STELLS541
@STELLS541 Жыл бұрын
Очень годно))
@vasiliy_konnov
@vasiliy_konnov Жыл бұрын
Очень крутой 😎👍
@lesters
@lesters Жыл бұрын
спасибо очень полезная инфа что он юзается в тандеме с мемо
@petrs5567
@petrs5567 Жыл бұрын
Grand merci à vous, но обращаю внимание уважаемого автора на потенциальную оговорку 8:03: по всей видимости, вместо фразы "два кейса когда нам нужен useEffect()" имелось в виду "два кейса, когда нам нужен useCallback()"? Поправьте, если не так
@mishanep
@mishanep Жыл бұрын
Да, всё так.
@ВячеславТихонов-ц7й
@ВячеславТихонов-ц7й Жыл бұрын
1е нормальное объяснеие🙏😀
@zubenkopetrovich4573
@zubenkopetrovich4573 Жыл бұрын
господа, сколько не смотрел не могу понять разницу между useMemo, useEffect, useCallback. Даже после просмотра этого видео не до конца понял всю ситуацию с useCallback. Если не сложно, можете подробно разъяснить или скинуть ссылку на какой-то источник с подробным объяснением.
@ПользовательПользователь-с8к
@ПользовательПользователь-с8к 10 ай бұрын
Стоило сказать про преждевременную оптимизацию всё же. А то пойдут ведь добавлять useCallback+memo куда не попадя, считая, что так надо 😅
@ArtmenBoss
@ArtmenBoss Жыл бұрын
В доке еще пишут можно все кастомные хуки в useCallback оборачивать
@mishanep
@mishanep Жыл бұрын
Оно там звучит примерно как "на всякий случай". Если команда небольшая и понятно как хуки будут использоваться, то оборачивать всё подряд было бы странно. Если пишем библиотеку, то уже выглядит логично.
@ПользовательПользователь-с8к
@ПользовательПользователь-с8к 10 ай бұрын
Я без доки для себя взял это правило. На самом деле тут двояко. Из плюсов - уменьшается ментальная сложность. Нам не нужно каждый раз заходить в хук и проверять, обернута ли функция, если мы ее используем в зависимостях в компоненте. Из минусов - уменьшается читаемость кода и увеличивается время написания. Немного увеличивается ментальная сложность при работе с хуком.
@weynemeynen
@weynemeynen Жыл бұрын
Два кейса когда нужен useEffect (8:03) или всё же useCallback?
@mishanep
@mishanep Жыл бұрын
useCallback
@Jaaaaaamp
@Jaaaaaamp Жыл бұрын
4:17 говорится, что обновился родитель, но чей это родитель? этот момент не понятен, может кто объяснить?
@HyndoDristalix14
@HyndoDristalix14 Жыл бұрын
Вопрос , а если мы данные вырисовываем с RTK query , то нужно ли использовать useCallback?
@HyndoDristalix14
@HyndoDristalix14 Жыл бұрын
либо React query, там же по сути автоматом кешируется все
@mishanep
@mishanep Жыл бұрын
Что конкретно вы предлагаете кэшировать с useCallback при использовании названных библиотек?
@cmac2cmac
@cmac2cmac Жыл бұрын
Спасибо!
@ALEKSEY_77737
@ALEKSEY_77737 10 ай бұрын
Спасибо
@mkhitarmuradyan4432
@mkhitarmuradyan4432 Жыл бұрын
fantastic !
@TpyrBo3Db
@TpyrBo3Db Жыл бұрын
тупо лучший
@maaobzor2824
@maaobzor2824 Жыл бұрын
В первом случае хватило бы только React.memo, повторных ререндеров компоненты не происходило бы
@ssurrokk
@ssurrokk Жыл бұрын
залогировал бы время отработки каждого из вариантов, иначе не очевидные у тебя утверждения на самом деле про скорость работы
@profesor08
@profesor08 Жыл бұрын
Можно забить на useCallback, если ты передаешь свой колбек в какой-то самый простой компонент. Или когда данные, от которых он зависит, постоянно обновляются, и ты точно знаешь как он устроен внутри. А вот взаимодействие с DOM, это уже дорогая операция, это дороже чем инициализировать функцию, и чем 10 функций. А еще очень часто есть много готовых компонентов и компонентов из сторонних модулей, и как на это повлияет использование useCallback, заранее не известно. А выстрелить это может в самый неподходящий момент, заблокировать юзеру страницу, сожрать всю память или вылететь с переполнением стека вызовов. По этому, из соображений безопасности и здравого смысла, использовать useCallback надо для каждой объявленной внутри компонента функции, которая зависит от данных в этом компоненте. В противном случае ей там делать нечего, и она должна быть объявлена вне компонента.
@Neteruss
@Neteruss Жыл бұрын
а если в Hook вынести?
@jamjam3337
@jamjam3337 Жыл бұрын
👏👍
@randomedd9102
@randomedd9102 Жыл бұрын
8:02 useCallback*
@boburmustafo8868
@boburmustafo8868 Жыл бұрын
spasibo
@miloman1995s
@miloman1995s Жыл бұрын
а как же removeEventListener, там необходимо передавать функцию с изначальной ссылкой, и соответственно для этого мы можем callback функцию, передаваемую в addEventListener обернуть в useCallback - чтобы не потерять ссылку на нашу изначальную callback функцию)
@mishanep
@mishanep Жыл бұрын
Смотря как вы добавляете, снимаете ивенты. Как правило, это одна и та же функция, обернутая в useEffect. А значит и ссылка на функцию будет одна.
@АлешаАлексей-г8ь
@АлешаАлексей-г8ь Жыл бұрын
База))
@darkside2436
@darkside2436 Жыл бұрын
Преждевременная оптимизация хуже чем никакая оптимизация вовсе.
@iiiyx
@iiiyx 8 ай бұрын
Автору и некоторым комментаторам не мешало бы мат часть подтянуть. Не так страшен ререндер, сколько перемонтирование в дом. Вот так насмотрятся таких видео, а потом удивляются, почему у них грид или тейбл тормозят, как отложения мамонта.
@sergey_zatsepin
@sergey_zatsepin Жыл бұрын
Ну вот эти слова про "дорогую операцию" ничем не подкрепленные, вообще не айс. Сам то проверял или так просто, услышал от кого-то, кто сам услышал от кого-то и т.д., и так вы просто повторяете бездумно друг за другом? Что там с holy js кстати, едешь/не едешь?
@alext5030
@alext5030 Жыл бұрын
Типичное поведение практически всех современных программистов, в т.ч. высокого уровня - это слепое следование каким-либо догмам, не пытаясь разобраться, насколько они актуальны и в каких случаях. Туда же ничем не подкрепленные заявления о низкой / высокой производительности, бесконечная битва с ререндерами (в SPA), бОльшая часть которых на производительность с позиции end user влияет практически... никак. А потом имеем глючное нечто типа сайта Озона (там Vue, но в данном случае это иррелевантно) с вот уже годами (периодически) отваливающейся фильтрацией. Таковы реалии современного программирования "по фэн-шую".
@ПользовательПользователь-с8к
@ПользовательПользователь-с8к 10 ай бұрын
Тут скорее дело не в том, дорогая операция или нет. Это в любом случае профилировать надо тогда. Оптимизация просто не нужна, если нет видимых проблем с перформансом. А оптимизация не бесплатна больше в плане то, что мы пишем лишний код/обертки, увеличиваем ментальную сложность. Пускай мы даже ускорили работу компонента, если в реальном использовании этого не видно, это нет смысл.
@Garry_Levin
@Garry_Levin 5 ай бұрын
Ролик может и неплохой, но без исходного текста не имеет никакого смысла. Дизлайк.
@ice_rd
@ice_rd Жыл бұрын
Почему во Vue все так просто и лаконично. Нужно действие - кидай в экшен, нужно вычисление + кэш - используй компьютед. В React такие сложности из колбека, мемо и рефов ... 🥲
@Лаурахит
@Лаурахит Жыл бұрын
Сам то же сравнивал и пришел к таким же выводам. Неоправданно все усложнено!!!
@PowWowVideo
@PowWowVideo Жыл бұрын
В реакте ТОЛЬКО 3-4 хука, которые надо заучить и правильно использовать и ВСЁ:) Какие сложности ?
@ReAgent003
@ReAgent003 Жыл бұрын
Согласен, реакт запутанный и в нём есть высокий риск уронить производительность. А Свелте, как и вью, проще в этом плане. Вот доклад на эту тему kzbin.infobB-R_lOlTLE?feature=share&t=744
@xeleos
@xeleos Жыл бұрын
согласен. В реакте на простейшие оптимизации надо тратить кучу времени, а во вью подход совершенно иной, там функции итак создаются 1 раз, поэтому ничего такого не надо.
@Лаурахит
@Лаурахит Жыл бұрын
@@PowWowVideo Согласен, хуков не много, но их часто используют для создания кастомных хуков, и потом с этим разбираться надо). Сложности в том что из коробки в React все таки меньше чем в том же Vue. Много нужно самому дописывать
@DenisBien
@DenisBien 5 ай бұрын
спасибо за видео!
React 15: Хук useMemo и useCallback
13:38
Школа web-программирования Constcode
Рет қаралды 27 М.
БУ, ИСПУГАЛСЯ?? #shorts
00:22
Паша Осадчий
Рет қаралды 2,8 МЛН
Миллионер | 3 - серия
36:09
Million Show
Рет қаралды 1,9 МЛН
#5: React Hooks - useCallback
23:54
Archakov Blog
Рет қаралды 51 М.
QA 5. Postman API. Вопросы с собеседований
9:28
QA Testing PRO Тестирование SRF
Рет қаралды 7 М.
🐬 ВСЕ ХУКИ REACT JS 2024 - вы точно не знаете их все
13:29
SIBERIA CAN CODE 🧊 - Frontend
Рет қаралды 8 М.
Новые хуки useTransition и useDeferredValue в React 18
22:17
Михаил Непомнящий
Рет қаралды 23 М.
Мемоизация в React. Хуки useMemo, useCallback
9:35
Кастомные React-Хуки, useToggle, useLocalStorage
22:20
Михаил Непомнящий
Рет қаралды 20 М.
React мемоизация - useCallback, useMemo, memo
31:02
БУ, ИСПУГАЛСЯ?? #shorts
00:22
Паша Осадчий
Рет қаралды 2,8 МЛН