#5: React Hooks - useCallback

  Рет қаралды 49,763

Archakov Blog

Archakov Blog

Күн бұрын

📢 Платный курс по ReactJS с наставником: mentor.archakov.im/landing.html
❤️ Поддержка:
- Patreon: / archakovblog
- Донаты: www.donationalerts.com/r/arch...
Советую сначала посмотреть, как работает useEffect, useRef и useMemo, чтобы понять принцип работы хука useCallback.
📢 О чём я буду рассказывать?
Я решил сделать новый курс по React-хукам и рассказать подробно о том, как работает каждый хук. В данном видео, я рассказываю о хуке useCallback.
Видео по остальным хукам:
- useState: • #1: React Hooks - useS...
- useEffect: • #2: React Hooks - useE...
- useRef: • #3: React Hooks - useRef
- useMemo + React.memo: • #4: React Hooks - useM...
❓ Кому подойдёт этот курс?
Для начинающих, которые только начали изучать ReactJS и для тех, кто изучает более 3-х месяцев.
На каждый хук, есть отдельная ветка в репозитории ниже. Просто кликаете по "Branch" и выбираете нужный хук.
Ссылка на GitHub: github.com/Archakov06/react-h...
0:00 - Начало
0:47 - Пример приложения с проблемой
2:45 - Решение проблемы и детальное объяснение потери ссылки на функцию
4:56 - Оборачиваем функцию с помощью useCallback
11:47 - Используем useCallback и useRef для получения актуальных данных
15:26 - Второй пример, в котором мы решим лишний ререндер с помощью React.useCallback + React.memo
22:09 - Почему не надо оборачивать все с помощью useCallback, useMemo и React.memo
🔗 Следите за обновлениями и информацией в:
- Telegram-канале: t.me/archakov_im
- VK: archakov_im
- Личном блоге: archakov.im
- GitHub: github.com/Archakov06
- Моё резюме: career.habr.com/archakovim

Пікірлер: 95
@r1cro
@r1cro 2 жыл бұрын
Мне кажется, что такие видео можно добавить в офф.документацию под каждую статью по хукам. Объяснение, как говорится, «на пальцах».
@TheLevius
@TheLevius 3 жыл бұрын
Пожалуй лучший урок по useCallback в React
@DANCEDAG
@DANCEDAG 3 жыл бұрын
Видео супер подача бомба ✅👍 Жду видео про хук useReducer, useContext и ещё про кастомнык хуки. Пожалуйста выпусти эти видео. Ты прям инфу в голову как в коробку книги кладёшь))
@Shadowblade52
@Shadowblade52 2 жыл бұрын
Согласен с вами. Новые видео по хукам не помешают
@GabrialWeb
@GabrialWeb 2 жыл бұрын
Лучший!!! Очень хорошо разжевываешь информацию!
@RainbowJet1
@RainbowJet1 2 жыл бұрын
Божественная подача информации! Вот изза чего хочется ставить лайк и подписку
@turalinov
@turalinov Жыл бұрын
Лучшее объяснение useCallback, спасибо за столь доскональное объяснение )
@gregoryHH
@gregoryHH Жыл бұрын
Автор, спасибо тебе огромное!!! Кучу всего перечитал и пересморел по хукам, но ничего не понял пока не посмотрел твои видосы. Спасибище!!! Ты так доходчиво объясняешь, что все становится понятно сразу!
@taras7844
@taras7844 3 жыл бұрын
Денис, самые понятнее уроки по хукам, с нетерпения жду следующих видосов.
@yulia_kotlyar
@yulia_kotlyar 3 жыл бұрын
Спасибо за видео, ты очень круто объясняешь про хуки!
@StorySieva
@StorySieva 2 жыл бұрын
Очень круто подаешь материал)
@user-tg1lh9ly5r
@user-tg1lh9ly5r 3 жыл бұрын
Cупер! Спасибо большое за видео!
@pavloskuibida6292
@pavloskuibida6292 3 жыл бұрын
Спасибо тебе, Человечище!
@user-gp9lt9cc2d
@user-gp9lt9cc2d 3 жыл бұрын
Сделай побольше видео про хуки. Круто и очень понятно объясняешь. Продолжай
@viacheslavhinchuk5162
@viacheslavhinchuk5162 2 жыл бұрын
единственный человек, у которого я увидел применение useCallback приближенное к реальности 👍
@nakku_tricks
@nakku_tricks 8 ай бұрын
Мужик, это лучшее объяснение данного хука на просторах веб-паутины, спасибо!
@artsiomwithoutme8753
@artsiomwithoutme8753 3 жыл бұрын
Зубенко Михаил Петрович - МАФИОЗНИК
@useit1
@useit1 3 жыл бұрын
Я просто лайк зашел поставить, видос потом гляну, он точно топ, надо к нг закупиться еще
@1MrGerman
@1MrGerman 2 жыл бұрын
Чудово пояснив! Я тепер розумію для чого потрібен цей useCallback
@zooyotz
@zooyotz Жыл бұрын
Еееее, какая годнота) Пожалуйста, не записывай видео 3 часа ночи
@oleksiik4473
@oleksiik4473 3 жыл бұрын
Ух темп :) Спасибо! Можна дальше useContext/useReducer
@__procherk__
@__procherk__ 3 жыл бұрын
йоу, отличное видео, да и плейлист по хукам в принципе, продолжай пожалуйста. Хотелось бы посмотреть создание сайта с методологией MERN)
@kri4evskiy
@kri4evskiy 3 жыл бұрын
А теперь добавь в этот плэй-лист видосик о кастомных хуках. Для полноты картины.
@user-ic9hf3ps4z
@user-ic9hf3ps4z Жыл бұрын
Благодарю
@manch-_-
@manch-_- 2 жыл бұрын
​ @Archakov Blog Привет! Спасибо больше за контент, очень доходчиво и без лишней воды! Очень жду от тебя, впрочем, наверное, как и многие тут, видео про useContext!) Планируешь ли записать его?
@michaeldevichenskiy4588
@michaeldevichenskiy4588 3 жыл бұрын
Всем по привету! Хорошее видео прям Минин второй :) Но один бы пример хоть где это нужно а где нет . Есть конечно догадки но на опыте еще не сталкивался .
@Maxim9575
@Maxim9575 3 жыл бұрын
Минин в сравнении с тобой просто нервно курит в сторонке. Классно объясняешь, не прекращай!
@wqqtm3584
@wqqtm3584 6 ай бұрын
callback, который передается первым аргументом будет в любом случаем пересоздавать так же, как и депсы, в случае если депсы не изменились у нас будет возвращаться старая ссылка на эту функцию, то есть с предыдущего рендера
@omarkertis5294
@omarkertis5294 3 жыл бұрын
Годноту подвезли) Денис, сделай пожалуйста объясняющее видео по своей папке config, которую обычно используешь в проектах. Там много чего накручено, далеко не всё понятно для чего.
@user-rk7dm1xm3r
@user-rk7dm1xm3r Жыл бұрын
Офигенно качественно и последовательно. Интересно какой у вас опыт ?
@user-gw4df2de3k
@user-gw4df2de3k Жыл бұрын
молодец!
@user-ri9io9vp3i
@user-ri9io9vp3i Жыл бұрын
🔥🔥🔥🔥🔥🔥🔥
@user-vn3if3wt9p
@user-vn3if3wt9p 2 жыл бұрын
Я ПОНЯЛ!!!
@SlimShady-pw1zp
@SlimShady-pw1zp 3 жыл бұрын
какая у тебя тема в VSC и спасибо за уроки
@viap.2845
@viap.2845 Жыл бұрын
👍👍👍👍👍👍👍
@user-on4lv7lc9k
@user-on4lv7lc9k 2 ай бұрын
видос идет 25 мин с темой useCallback, но при этом посвятили ему тут минут 5 максимум
@whiteguards43
@whiteguards43 Жыл бұрын
А все внутренние функции который пересоздаются и вызываются, к примеру та же функция Stop, раз она перевызвалась, то должна же тоже увидеть ссылку на новый скролл?
@vladthorenco2675
@vladthorenco2675 3 жыл бұрын
Сам React должен делать ренедеры. Это необходимо делать только в крайних случаях, если хотите достичь производительности, а так пускай делает ререндеры. Как говориться в пределах разумного. Спасибо за информацию, было полезно
@user-iq9ll8lz9m
@user-iq9ll8lz9m 3 жыл бұрын
Привет. Спасибо за контент. Вопрос, это последнее видео серии про хуки?
@ArchakovBlog
@ArchakovBlog 3 жыл бұрын
Привет! Не-а
@manch-_-
@manch-_- 2 жыл бұрын
​@@ArchakovBlog Привет! Спасибо больше за контент, очень доходчиво и без лишней воды! Очень жду от тебя, впрочем, наверное, как и многие тут, видео про useContext!) Планируешь ли записать его?
@localhost666
@localhost666 Жыл бұрын
Разве после ререндера в функции stop содержится предыдущий handleScroll? Она же тоже заново создаётся, соответственно и хэндлскролл в ней новый. А то что после изменения стэйта после вызова stop вызов хэндлскролл не прекращается, то это происходит вызов предыдущей функции, потому что она так и осталась, мы удалили подписку только на текущий хэндлскролл. Это можно проверить, добавив вывод в консоль стэйта
@lidijajezova2025
@lidijajezova2025 Жыл бұрын
Продублирую вопрос, которые уже задавали, может ответит кто-то. Если все функции пересоздаются заново, то почему в stop не записывает ссылка на только созданную handleScroll?
@ko22012
@ko22012 2 жыл бұрын
в этом примере нет необходимости использовать useCallback и memo в реальном проекте. это имеет смысла, если в дочерних компонентах большие вычисления. Это просто пример.
@sergeydostovalov6180
@sergeydostovalov6180 11 ай бұрын
То, что ререндер - это норм и реакт всё разрулит - миф. Можете сравнить отзывчивость интерфейсов озона и яндекс маркета. В озоне используется вью, в котором по умолчанию всё мемоизировано (новые значения пропсов нужно отслеживать явно), а в яндексе любой неосторожный клик пораждает перерисовку всей страницы.
@luchick6852
@luchick6852 3 жыл бұрын
Коммент просто
@Gdyvfjttyhhh
@Gdyvfjttyhhh Жыл бұрын
По поводу первого примера, а именно о том что "функция запоминает данные при маунте" стоило бы еще и добавить, что это не магия какая-то, а обычное замыкание. Функция замкнулась на данные из Lexical Environment функции App при первом вызове.
@astkh4381
@astkh4381 Жыл бұрын
можешь, пожалуйста, объяснить почему когда мы обновляем стейт, а вместе с ним функцию start, то start не обновляет ссылку на handleScroll?
@wqqtm3584
@wqqtm3584 6 ай бұрын
@@astkh4381 Арчаков ошибся в этот куске, когда обновляется компонент, все функции создаются заново и обработчик удаления скролла будет ссылаться не на старую ссылку, как он сказал, а на новую, а если мы удаляем новую ссылку на функцию hadleScroll, старая остается, соответсвенно и скролл останется
@amelianceskymusic
@amelianceskymusic Жыл бұрын
22:50 - из документации: «Этот метод предназначен только для оптимизации производительности. Не полагайтесь на него, чтобы «предотвратить» рендер, так как это может привести к ошибкам.»
@abdulloxathamov1358
@abdulloxathamov1358 3 жыл бұрын
сделайте видео об "Axios"
@rozt107
@rozt107 Жыл бұрын
Надо добавить что на практике создавать ивент листенер таким образом не надо, только использовать ивенты реакта
@arturam9768
@arturam9768 3 жыл бұрын
А почему конда start пересоздается, не начинает работать с тоже пересозданным handleClick-oм, а все равно ссылается на старый?
@Sl1de13
@Sl1de13 3 жыл бұрын
Начинает, но стоп уже не ссылается на старый листенер, поэтому стартовать то новый евент линтенер стартует, а вот старый евент не стопится уже
@ruslankarimov6490
@ruslankarimov6490 3 ай бұрын
Спасибо!!!
@4sARy
@4sARy 3 жыл бұрын
Можно же заместо prev[prev.length - 1] + 1 просто написать prev.length : ?
@aipronator
@aipronator 3 жыл бұрын
Это частный случай, подойдет для [1,2,3,4,5], но не подойдет например для [2,3,4,5].
@artem8547
@artem8547 Жыл бұрын
Зачем хэндлер делать через eventListener если можно через пропсу. Или это как пример?
@lorandemarcus
@lorandemarcus 3 жыл бұрын
Получается useCallback замыкает в себе старое лексическое окружение?
@OlegKshlkv
@OlegKshlkv 2 жыл бұрын
Спасибо за видео, но у меня есть вопрос: а почему нельзя просто функции onPlus и onMinus вынести за пределы компонента? Нам же нет смысла их каждый раз пересоздавать?
@user-pd7kh1hw7c
@user-pd7kh1hw7c 2 жыл бұрын
они использую локальный стейт компонента, следовательно, не будут работать "выше" компонента)
@StrikerFeed
@StrikerFeed Жыл бұрын
@@user-pd7kh1hw7c Но ведь функция "выше" компонента может как аргумент принимать сеттер из useState'а, и внутри вызывать этот сеттер :) Это все костыли и я не поддерживаю автора идеи вынести функции выше, но я сказал, что в принципе - это возможно)
@ivanMoldovanu
@ivanMoldovanu Жыл бұрын
Хотел бы спросить: Правильно ли я понимаю - если есть дочерний компонент, ререндеры которого очень дорогостоящие, то, в таком случае, мы оборачиваем функцию, которую передаем в него, в useCallback. Вопрос вот в чем - допустим, в этот дочерний компонент мы передаем 5 функций. Если я не оберну хотя бы одну функцию в useCallback, то обернутые остальные 4 функции не имеют смысла(т к при ререндере родительского компонента, из которого мы эти функции передаем в дочерний, ререндерится эта одна единственная необернутая функция, что заставляет ререндерится дочерний компонент)? Заранее спасибо за ответ!
@artful_alpha
@artful_alpha 2 жыл бұрын
Button- су , плевать - сохранились у вас ссылки или нет :D
@kentavr_go
@kentavr_go Жыл бұрын
Не понятно одно, почему применяя useCallback без зависимостей numbers остаётся неизменным, хотя это ссылка, а используя useRef меняется, хотя это тоже ссылка.
@user-eq2eb5dk3k
@user-eq2eb5dk3k 8 күн бұрын
Спасибо за уроки, одни из лучших на ютубе если не лучшие. Можно вопрос? Откуда английский акцент и странные фразочки типа "это есть неправильно"?))))) Мы так не говорим уже лет 100 или 200. Сейчас "это есть неправильно" значит что ты кушаешь то, что не положено))
@saswwer
@saswwer 2 жыл бұрын
Если все функции пересоздаются заново, то почему в stop не записывает ссылка на только созданную handleScroll
@lidijajezova2025
@lidijajezova2025 Жыл бұрын
Тоже не понимаю
@wither-it-channel
@wither-it-channel Жыл бұрын
✅ - это какая то библиотека?
@user-cp7qw6ox6b
@user-cp7qw6ox6b Жыл бұрын
Модель своей клавиатуры не подскажешь? Больно клёва звучит она.
@ArchakovBlog
@ArchakovBlog Жыл бұрын
Varmilo VA87MN
@user-ri9io9vp3i
@user-ri9io9vp3i Жыл бұрын
А в чем прикол useCallback, если есть useRef, в котором мы можем сохранить функцию?
@mk3mk3mk
@mk3mk3mk 9 ай бұрын
Ужос! И это только с тремя кнопками! Такой гемор😊 А что будет в случае интернет магазина😮
@sergeyzhukov1370
@sergeyzhukov1370 3 жыл бұрын
Плохо на самом деле тем что вся эта мемоизация кушает оперативку. Все переменные колбека и зависимости хранится в памяти и для каждой завимости отдельный колбек. Да это также можно использовать для предотвращения многократного выполнения тяжелых операций но по факту это костыль для работы проверок идентичности у объектов и функций
@ArchakovBlog
@ArchakovBlog 3 жыл бұрын
Плохо в том случае, если мемоизировать все подряд. Даже если разраб будет оборачивать все мемоизировать, пользователь не заметит особых ухудшений производительности, просто, нет смысла. К счастью, браузер не выделяет 2мб памяти на вкладку
@sergeyzhukov1370
@sergeyzhukov1370 3 жыл бұрын
@@ArchakovBlog К сожалению в большинстве проектов я вижу что практически все обернуто в useCallback и useMemo, разрабы делают это даже просто на всякий случай. Вот и я стал постепенно привыкать к плохому) По сути если метод никуда не передается в пропсы и не содержит сайд эфектов мемоизация не нужна. Ну и кстати все зависит от того какими данными оперериует колбек если там например большой массив картинок в base64 формате обрабатывается то думаю браузер в кокой то момент подвиснет или выдаст ошибку интересно даже может эксперемент проведу как нибудь.
@krolikrodjer8879
@krolikrodjer8879 3 жыл бұрын
Ничего она не кушает. В случае с этими хуками -- кешируется только одно единственное значение, не считая легковесного массива зависимостей. Без мемоизации каждый рендер создает новую функцию, уничтожая старую, с мемоизацией дела обстоят даже проще -- не происходит лишняя аллокация памяти без необходимости, но размер памяти остается ровно таким же. Единственный случай, когда мемоизация играет плохую роль -- когда компонент уже вне зоны видимости, но на такие кейсы реакт умеет самостоятельно очищать закешированные значения, потому хуки мемоизации не работают на 100% надежно.
@sergeyzhukov1370
@sergeyzhukov1370 3 жыл бұрын
@@krolikrodjer8879 Ну то что для каждой зависимости это да я ошибся но как минимум в два раза больше памяти будут занимать все эти переменные. И насчет легковесности опять же все зависит от того что в зависимостях, хотя конечно использовать в качестве зависимостей что то кроме скалярных значений не совсем правильно но ничто не запрещает это делать и получается что по факту это не оптимизация а лишь вынужденная мера, чтобы избежать лишних рендеров
@sergeyzhukov1370
@sergeyzhukov1370 3 жыл бұрын
И еще не вижу проблемы в том что создается при каждом рендере новая функция. Это не более накладная операция чем создание и обслуживание мемоизованного стейта, проверки и апдейты этого стейта на каждом рендере
@gulamovrustam85
@gulamovrustam85 3 жыл бұрын
Всё таки не показал примерами, когда не рекомендуется использовать usecallback
@atlasua2021
@atlasua2021 2 жыл бұрын
Не React всё таки, конченная вещь.
@miloman1995s
@miloman1995s 2 жыл бұрын
Vue рулит
@atlasua2021
@atlasua2021 2 жыл бұрын
@@miloman1995s он реактивен.
@andTutin
@andTutin 2 жыл бұрын
Напиши не конченую вещь, человечество ждёт
@atlasua2021
@atlasua2021 2 жыл бұрын
@@andTutin ты не понимаешь шуток? иди учись в свой гигбрейнс дитя.
@atlasua2021
@atlasua2021 2 жыл бұрын
откуда столько злости (
@greatseller9541
@greatseller9541 3 жыл бұрын
действием очистки консоли ждать отвязки события...
#4: React Hooks - useMemo + React.memo
25:38
Archakov Blog
Рет қаралды 69 М.
Climbing to 18M Subscribers 🎉
00:32
Matt Larose
Рет қаралды 35 МЛН
Неприятная Встреча На Мосту - Полярная звезда #shorts
00:59
Полярная звезда - Kuzey Yıldızı
Рет қаралды 6 МЛН
Дибала против вратаря Легенды
00:33
Mr. Oleynik
Рет қаралды 3,1 МЛН
3 wheeler new bike fitting
00:19
Ruhul Shorts
Рет қаралды 49 МЛН
React Hooks - Полный Курс (Про Все Хуки в 1 видео!)
1:47:00
Владилен Минин
Рет қаралды 437 М.
Learn React Hooks: useCallback - Simply Explained!
17:15
Cosden Solutions
Рет қаралды 74 М.
#3: React Hooks - useRef
27:52
Archakov Blog
Рет қаралды 64 М.
Учимся использовать useMemo, useCallback и React.memo | подводные камни | JavaScript, React
37:25
Елена Литвинова — Искусство Веб-разработки 🛸
Рет қаралды 23 М.
All useEffect Mistakes Every Junior React Developer Makes
22:23
Climbing to 18M Subscribers 🎉
00:32
Matt Larose
Рет қаралды 35 МЛН