#5: React Hooks - useCallback

Sdílet
Vložit
  • čas přidán 8. 09. 2024

Komentáře • 95

  • @r1cro
    @r1cro Před 3 lety +52

    Мне кажется, что такие видео можно добавить в офф.документацию под каждую статью по хукам. Объяснение, как говорится, «на пальцах».

  • @DANCEDAG
    @DANCEDAG Před 3 lety +39

    Видео супер подача бомба ✅👍
    Жду видео про хук useReducer, useContext и ещё про кастомнык хуки.
    Пожалуйста выпусти эти видео.
    Ты прям инфу в голову как в коробку книги кладёшь))

    • @Shadowblade52
      @Shadowblade52 Před 3 lety

      Согласен с вами. Новые видео по хукам не помешают

  • @TheLevius
    @TheLevius Před 3 lety +11

    Пожалуй лучший урок по useCallback в React

  • @gregoryHH
    @gregoryHH Před 2 lety +3

    Автор, спасибо тебе огромное!!! Кучу всего перечитал и пересморел по хукам, но ничего не понял пока не посмотрел твои видосы. Спасибище!!! Ты так доходчиво объясняешь, что все становится понятно сразу!

  • @turalinov
    @turalinov Před rokem +1

    Лучшее объяснение useCallback, спасибо за столь доскональное объяснение )

  • @yulia_kotlyar
    @yulia_kotlyar Před 3 lety +5

    Спасибо за видео, ты очень круто объясняешь про хуки!

  • @taras7844
    @taras7844 Před 3 lety +1

    Денис, самые понятнее уроки по хукам, с нетерпения жду следующих видосов.

  • @nakku_tricks
    @nakku_tricks Před 11 měsíci

    Мужик, это лучшее объяснение данного хука на просторах веб-паутины, спасибо!

  • @viacheslavhinchuk5162
    @viacheslavhinchuk5162 Před 2 lety

    единственный человек, у которого я увидел применение useCallback приближенное к реальности 👍

  • @RainbowJet1
    @RainbowJet1 Před 2 lety +1

    Божественная подача информации! Вот изза чего хочется ставить лайк и подписку

  • @__procherk__
    @__procherk__ Před 3 lety +6

    йоу, отличное видео, да и плейлист по хукам в принципе, продолжай пожалуйста. Хотелось бы посмотреть создание сайта с методологией MERN)

  • @useit1
    @useit1 Před 3 lety +2

    Я просто лайк зашел поставить, видос потом гляну, он точно топ, надо к нг закупиться еще

  • @user-gp9lt9cc2d
    @user-gp9lt9cc2d Před 3 lety +1

    Сделай побольше видео про хуки. Круто и очень понятно объясняешь. Продолжай

  • @kri4evskiy
    @kri4evskiy Před 3 lety +7

    А теперь добавь в этот плэй-лист видосик о кастомных хуках. Для полноты картины.

  • @GabrialWeb
    @GabrialWeb Před 2 lety

    Лучший!!! Очень хорошо разжевываешь информацию!

  • @1MrGerman
    @1MrGerman Před 2 lety

    Чудово пояснив! Я тепер розумію для чого потрібен цей useCallback

  • @Maxim9575
    @Maxim9575 Před 3 lety

    Минин в сравнении с тобой просто нервно курит в сторонке. Классно объясняешь, не прекращай!

  • @zooyotz
    @zooyotz Před rokem

    Еееее, какая годнота) Пожалуйста, не записывай видео 3 часа ночи

  • @StorySieva
    @StorySieva Před 2 lety +1

    Очень круто подаешь материал)

  • @wqqtm3584
    @wqqtm3584 Před 9 měsíci

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

  • @pavloskuibida6292
    @pavloskuibida6292 Před 3 lety +1

    Спасибо тебе, Человечище!

  • @artsiomwithoutme8753
    @artsiomwithoutme8753 Před 3 lety +4

    Зубенко Михаил Петрович - МАФИОЗНИК

  • @michaeldevichenskiy4588
    @michaeldevichenskiy4588 Před 3 lety +1

    Всем по привету! Хорошее видео прям Минин второй :) Но один бы пример хоть где это нужно а где нет . Есть конечно догадки но на опыте еще не сталкивался .

  • @user-tg1lh9ly5r
    @user-tg1lh9ly5r Před 3 lety

    Cупер! Спасибо большое за видео!

  • @vladthorenco2675
    @vladthorenco2675 Před 3 lety +2

    Сам React должен делать ренедеры. Это необходимо делать только в крайних случаях, если хотите достичь производительности, а так пускай делает ререндеры. Как говориться в пределах разумного. Спасибо за информацию, было полезно

  • @oleksiik4473
    @oleksiik4473 Před 3 lety +1

    Ух темп :) Спасибо! Можна дальше useContext/useReducer

  • @Gdyvfjttyhhh
    @Gdyvfjttyhhh Před rokem

    По поводу первого примера, а именно о том что "функция запоминает данные при маунте" стоило бы еще и добавить, что это не магия какая-то, а обычное замыкание. Функция замкнулась на данные из Lexical Environment функции App при первом вызове.

    • @astkh4381
      @astkh4381 Před rokem

      можешь, пожалуйста, объяснить почему когда мы обновляем стейт, а вместе с ним функцию start, то start не обновляет ссылку на handleScroll?

    • @wqqtm3584
      @wqqtm3584 Před 9 měsíci

      @@astkh4381 Арчаков ошибся в этот куске, когда обновляется компонент, все функции создаются заново и обработчик удаления скролла будет ссылаться не на старую ссылку, как он сказал, а на новую, а если мы удаляем новую ссылку на функцию hadleScroll, старая остается, соответсвенно и скролл останется

  • @user-ic9hf3ps4z
    @user-ic9hf3ps4z Před rokem

    Благодарю

  • @user-rk7dm1xm3r
    @user-rk7dm1xm3r Před rokem

    Офигенно качественно и последовательно. Интересно какой у вас опыт ?

  • @ko22012
    @ko22012 Před 2 lety

    в этом примере нет необходимости использовать useCallback и memo в реальном проекте. это имеет смысла, если в дочерних компонентах большие вычисления. Это просто пример.

  • @lidijajezova2025
    @lidijajezova2025 Před 2 lety +1

    Продублирую вопрос, которые уже задавали, может ответит кто-то.
    Если все функции пересоздаются заново, то почему в stop не записывает ссылка на только созданную handleScroll?

  • @localhost666
    @localhost666 Před rokem

    Разве после ререндера в функции stop содержится предыдущий handleScroll? Она же тоже заново создаётся, соответственно и хэндлскролл в ней новый. А то что после изменения стэйта после вызова stop вызов хэндлскролл не прекращается, то это происходит вызов предыдущей функции, потому что она так и осталась, мы удалили подписку только на текущий хэндлскролл. Это можно проверить, добавив вывод в консоль стэйта

  • @omarkertis5294
    @omarkertis5294 Před 3 lety

    Годноту подвезли) Денис, сделай пожалуйста объясняющее видео по своей папке config, которую обычно используешь в проектах. Там много чего накручено, далеко не всё понятно для чего.

  • @user-gw4df2de3k
    @user-gw4df2de3k Před 2 lety

    молодец!

  • @arturam9768
    @arturam9768 Před 3 lety +3

    А почему конда start пересоздается, не начинает работать с тоже пересозданным handleClick-oм, а все равно ссылается на старый?

    • @Sl1de13
      @Sl1de13 Před 3 lety +1

      Начинает, но стоп уже не ссылается на старый листенер, поэтому стартовать то новый евент линтенер стартует, а вот старый евент не стопится уже

  • @manch-_-
    @manch-_- Před 3 lety

    ​ @Archakov Blog Привет! Спасибо больше за контент, очень доходчиво и без лишней воды! Очень жду от тебя, впрочем, наверное, как и многие тут, видео про useContext!) Планируешь ли записать его?

  • @sergeydostovalov6180
    @sergeydostovalov6180 Před rokem

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

  • @rozt107
    @rozt107 Před 2 lety

    Надо добавить что на практике создавать ивент листенер таким образом не надо, только использовать ивенты реакта

  • @user-vn3if3wt9p
    @user-vn3if3wt9p Před 2 lety

    Я ПОНЯЛ!!!

  • @user-ri9io9vp3i
    @user-ri9io9vp3i Před rokem

    🔥🔥🔥🔥🔥🔥🔥

  • @lorandemarcus
    @lorandemarcus Před 3 lety +2

    Получается useCallback замыкает в себе старое лексическое окружение?

  • @whiteguards43
    @whiteguards43 Před rokem

    А все внутренние функции который пересоздаются и вызываются, к примеру та же функция Stop, раз она перевызвалась, то должна же тоже увидеть ссылку на новый скролл?

  • @ivanMoldovanu
    @ivanMoldovanu Před rokem

    Хотел бы спросить:
    Правильно ли я понимаю - если есть дочерний компонент, ререндеры которого очень дорогостоящие, то, в таком случае, мы оборачиваем функцию, которую передаем в него, в useCallback. Вопрос вот в чем - допустим, в этот дочерний компонент мы передаем 5 функций. Если я не оберну хотя бы одну функцию в useCallback, то обернутые остальные 4 функции не имеют смысла(т к при ререндере родительского компонента, из которого мы эти функции передаем в дочерний, ререндерится эта одна единственная необернутая функция, что заставляет ререндерится дочерний компонент)? Заранее спасибо за ответ!

  • @user-on4lv7lc9k
    @user-on4lv7lc9k Před 5 měsíci

    видос идет 25 мин с темой useCallback, но при этом посвятили ему тут минут 5 максимум

  • @4sARy
    @4sARy Před 3 lety +2

    Можно же заместо prev[prev.length - 1] + 1 просто написать prev.length : ?

    • @aipronator
      @aipronator Před 3 lety

      Это частный случай, подойдет для [1,2,3,4,5], но не подойдет например для [2,3,4,5].

  • @amelianceskymusic
    @amelianceskymusic Před rokem

    22:50 - из документации: «Этот метод предназначен только для оптимизации производительности. Не полагайтесь на него, чтобы «предотвратить» рендер, так как это может привести к ошибкам.»

  • @ruslankarimov6490
    @ruslankarimov6490 Před 6 měsíci

    Спасибо!!!

  • @kentavr_go
    @kentavr_go Před rokem

    Не понятно одно, почему применяя useCallback без зависимостей numbers остаётся неизменным, хотя это ссылка, а используя useRef меняется, хотя это тоже ссылка.

  • @artem8547
    @artem8547 Před rokem

    Зачем хэндлер делать через eventListener если можно через пропсу. Или это как пример?

  • @viap.2845
    @viap.2845 Před rokem

    👍👍👍👍👍👍👍

  • @OlegKshlkv
    @OlegKshlkv Před 2 lety +1

    Спасибо за видео, но у меня есть вопрос: а почему нельзя просто функции onPlus и onMinus вынести за пределы компонента? Нам же нет смысла их каждый раз пересоздавать?

    • @user-pd7kh1hw7c
      @user-pd7kh1hw7c Před 2 lety +3

      они использую локальный стейт компонента, следовательно, не будут работать "выше" компонента)

    • @StrikerFeed
      @StrikerFeed Před 2 lety +1

      @@user-pd7kh1hw7c Но ведь функция "выше" компонента может как аргумент принимать сеттер из useState'а, и внутри вызывать этот сеттер :)
      Это все костыли и я не поддерживаю автора идеи вынести функции выше, но я сказал, что в принципе - это возможно)

  • @user-cp7qw6ox6b
    @user-cp7qw6ox6b Před 2 lety

    Модель своей клавиатуры не подскажешь? Больно клёва звучит она.

  • @abdulloxathamov1358
    @abdulloxathamov1358 Před 3 lety

    сделайте видео об "Axios"

  • @user-ri9io9vp3i
    @user-ri9io9vp3i Před rokem

    А в чем прикол useCallback, если есть useRef, в котором мы можем сохранить функцию?

  • @user-iq9ll8lz9m
    @user-iq9ll8lz9m Před 3 lety

    Привет. Спасибо за контент. Вопрос, это последнее видео серии про хуки?

    • @ArchakovBlog
      @ArchakovBlog  Před 3 lety +2

      Привет! Не-а

    • @manch-_-
      @manch-_- Před 3 lety

      ​@@ArchakovBlog Привет! Спасибо больше за контент, очень доходчиво и без лишней воды! Очень жду от тебя, впрочем, наверное, как и многие тут, видео про useContext!) Планируешь ли записать его?

  • @SlimShady-pw1zp
    @SlimShady-pw1zp Před 3 lety

    какая у тебя тема в VSC и спасибо за уроки

  • @luchick6852
    @luchick6852 Před 3 lety

    Коммент просто

  • @artful_alpha
    @artful_alpha Před 2 lety

    Button- су , плевать - сохранились у вас ссылки или нет :D

  • @saswwer
    @saswwer Před 2 lety

    Если все функции пересоздаются заново, то почему в stop не записывает ссылка на только созданную handleScroll

  • @user-eq2eb5dk3k
    @user-eq2eb5dk3k Před 2 měsíci

    Спасибо за уроки, одни из лучших на ютубе если не лучшие. Можно вопрос? Откуда английский акцент и странные фразочки типа "это есть неправильно"?))))) Мы так не говорим уже лет 100 или 200. Сейчас "это есть неправильно" значит что ты кушаешь то, что не положено))

  • @wither-it-channel
    @wither-it-channel Před rokem

    ✅ - это какая то библиотека?

  • @mk3mk3mk
    @mk3mk3mk Před 11 měsíci

    Ужос! И это только с тремя кнопками! Такой гемор😊 А что будет в случае интернет магазина😮

  • @sergeyzhukov1370
    @sergeyzhukov1370 Před 3 lety

    Плохо на самом деле тем что вся эта мемоизация кушает оперативку. Все переменные колбека и зависимости хранится в памяти и для каждой завимости отдельный колбек. Да это также можно использовать для предотвращения многократного выполнения тяжелых операций но по факту это костыль для работы проверок идентичности у объектов и функций

    • @ArchakovBlog
      @ArchakovBlog  Před 3 lety

      Плохо в том случае, если мемоизировать все подряд. Даже если разраб будет оборачивать все мемоизировать, пользователь не заметит особых ухудшений производительности, просто, нет смысла. К счастью, браузер не выделяет 2мб памяти на вкладку

    • @sergeyzhukov1370
      @sergeyzhukov1370 Před 3 lety +1

      @@ArchakovBlog К сожалению в большинстве проектов я вижу что практически все обернуто в useCallback и useMemo, разрабы делают это даже просто на всякий случай. Вот и я стал постепенно привыкать к плохому) По сути если метод никуда не передается в пропсы и не содержит сайд эфектов мемоизация не нужна. Ну и кстати все зависит от того какими данными оперериует колбек если там например большой массив картинок в base64 формате обрабатывается то думаю браузер в кокой то момент подвиснет или выдаст ошибку интересно даже может эксперемент проведу как нибудь.

    • @krolikrodjer8879
      @krolikrodjer8879 Před 3 lety +1

      Ничего она не кушает. В случае с этими хуками -- кешируется только одно единственное значение, не считая легковесного массива зависимостей. Без мемоизации каждый рендер создает новую функцию, уничтожая старую, с мемоизацией дела обстоят даже проще -- не происходит лишняя аллокация памяти без необходимости, но размер памяти остается ровно таким же. Единственный случай, когда мемоизация играет плохую роль -- когда компонент уже вне зоны видимости, но на такие кейсы реакт умеет самостоятельно очищать закешированные значения, потому хуки мемоизации не работают на 100% надежно.

    • @sergeyzhukov1370
      @sergeyzhukov1370 Před 3 lety

      @@krolikrodjer8879 Ну то что для каждой зависимости это да я ошибся но как минимум в два раза больше памяти будут занимать все эти переменные. И насчет легковесности опять же все зависит от того что в зависимостях, хотя конечно использовать в качестве зависимостей что то кроме скалярных значений не совсем правильно но ничто не запрещает это делать и получается что по факту это не оптимизация а лишь вынужденная мера, чтобы избежать лишних рендеров

    • @sergeyzhukov1370
      @sergeyzhukov1370 Před 3 lety

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

  • @gulamovrustam85
    @gulamovrustam85 Před 3 lety

    Всё таки не показал примерами, когда не рекомендуется использовать usecallback

  • @atlasua2021
    @atlasua2021 Před 3 lety +12

    Не React всё таки, конченная вещь.

    • @miloman1995s
      @miloman1995s Před 3 lety

      Vue рулит

    • @atlasua2021
      @atlasua2021 Před 3 lety

      @@miloman1995s он реактивен.

    • @andTutin
      @andTutin Před 2 lety +2

      Напиши не конченую вещь, человечество ждёт

    • @atlasua2021
      @atlasua2021 Před 2 lety +1

      @@andTutin ты не понимаешь шуток? иди учись в свой гигбрейнс дитя.

    • @atlasua2021
      @atlasua2021 Před 2 lety +1

      откуда столько злости (

  • @greatseller9541
    @greatseller9541 Před 3 lety

    действием очистки консоли ждать отвязки события...