Не делай такое с useState! Топ 5 ошибок junior React-разработчика

Sdílet
Vložit
  • čas přidán 6. 06. 2024
  • Часто начинающие React-разработчики используют хук или неправильно или не по назначению. В этом видео мы попытаемся разобраться с самыми популярными ошибками/багами с использованием useState и научимся их исправлять.
    ⏰ Таймкоды:
    00:00:00 Начало
    00:00:58 useState + setInterval/setTimeout
    00:04:48 Работа со старым стейтом
    00:08:08 Обращение к undefined внутри стейта
    00:14:25 Не надо хранить в useState все данные
    00:16:44 Неправильное изменение стейта (мутация)
    🔗 Следите за обновлениями и информацией в:
    - Telegram-канале: t.me/archakov_im
    - VK: archakov_im
    - Личном блоге: archakov.im
    - GitHub: github.com/Archakov06
    - Моё резюме: career.habr.com/archakovim
    #react #usestate #state #reactstate #стейт #setstate #junior #реакт #разработка

Komentáře • 167

  • @serjmarkelov9915
    @serjmarkelov9915 Před rokem +18

    Я перерыл много обучающих видео на youtube включая англоязычные, но твоя подача контента и умение объяснять превосходят всё и вся. Спасибо большое)

    • @user-wl2xp8yo6x
      @user-wl2xp8yo6x Před rokem +4

      мне кажется ты просто плохо ищешь)) Многие штуки он берет как раз из зарубежного ютуба.

    • @connectw
      @connectw Před 10 měsíci

      @@user-wl2xp8yo6x Привет. Можешь порекомендовать зарубежных ютуберов по реакту?

    • @TonyPony7
      @TonyPony7 Před 8 měsíci

      нигде не обходится без льстецов!

  • @GroundGamer
    @GroundGamer Před rokem +67

    Если объяснить весь ролик коротко, то вот:
    1. Хочешь предыдущее значение ? Используй callback функцию с аргументом в виде предыдущего значения
    2. Не хочешь ошибок в "пустом" useState ? Ставь default случай
    3. Данные обновляются ? Используй useState
    4. Манипуляция над списками:
    4.1.Хочешь обновить список ? Делай так: setState(...state, newState)
    4.2. Хочешь удалить из списка элемент ? Делай так:
    4.2.1. const cloneTasks = [...tasks]
    4.2.2. cloneTasks.splice(${нужный индекс задачи}, 1)
    4.2.3. setState(...state, cloneTasks)
    4.3. Хочешь изменить элемент списка ? Делай так:
    4.3.1. const formedTasks = tasks.map(task, i => { if (i === 1) { return { text: 'newText' } }} return task)
    4.3.2. setState(...state, formedTasks)
    Получается топ 4?))

    • @kawaikaino5277
      @kawaikaino5277 Před rokem +1

      а почему именно splice, а не скажем .filter ? )

    • @GroundGamer
      @GroundGamer Před rokem +1

      @@kawaikaino5277 я лично выбрал splice, чтобы проще делать отладку, в случае чего-то. Кнч, можно сделать что-то такое:
      1. const formedTasks = state.filter(...)
      2. return formedTasks
      Но также, в splice ты можешь начать с индекса таски, которую тебе нужно удалить, а не идти по целому списку. Как бы да, ты используешь проход по массиву, так как и filter, но в конкретном случае, как я понимаю, splice начинает с определённого индекса массива и затем уже делает те действия, которые нам нужны. По поводу "проход по массиву", я начал разъяснять так, как примерно работает под капотом
      Если в чём-то не прав, поправьте меня пожалуйста))

    • @kawaikaino5277
      @kawaikaino5277 Před rokem

      ​@@GroundGamer По поводу, прохода по всему массиву, при использовании filter.
      а. В большинстве случаев, это экономия на муравьях, т.к чаще всего не приходится работать с длинными массивами
      б. Ну уж, если пришлось обработать длинный, на сколько мне известно движок под капотом оптимизирует выполнение filter (но это не точно)
      Спасибо за ответ

    • @lirrr6555
      @lirrr6555 Před rokem +1

      @@GroundGamer зачем здесь переменная formedTasks? filter иммутабелен, можно сразу делать return state.filter(...)

    • @GroundGamer
      @GroundGamer Před rokem

      @@lirrr6555 Можно, конечно. В целом, хоть однострочные решения и "красивы", но иногда, они сложны для отладки, допустим когда у нас в фильтре (или ещё в каком либо методе массива), содержится ещё один массив по которому нам нужно пройтись, и вся их "красота" перестаёт быть "красотой" и превращается в "чудовище", которое ещё бывает сложно прочитать разрабу. Поэтому, я выбрал для себя такое написание переменных, как за основу

  • @user-le6ly6ri6t
    @user-le6ly6ri6t Před rokem +1

    Огромная благодарность за такое видео про особенности useState! Будем ждать про другие хуки в том же формате!

  • @rustamakhmetyanov4404
    @rustamakhmetyanov4404 Před rokem +5

    Спасибо за работу, любое обучающее видео от вас интересно, тем более такого формата. Интересен ещё useEffect с его побочками и проблемами.

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

    Очень все понятно и доступно, спасибо тебе за такой классный материал 👍 Таких очень мало, кто может объяснить так доходчиво и просто

  • @dmitriykarabasov1440
    @dmitriykarabasov1440 Před rokem

    Отличный контент! Продолжайте, мы ждём!

  • @ArtDen100
    @ArtDen100 Před rokem +3

    Ты невероятно круто объясняешь!!! Запиши видео по всем основным хукам, это будет супер

  • @jimsaharov
    @jimsaharov Před rokem

    Спасибо за урок! Очень грамотно объясняете материал и к тому же в таких тонкостях. Для меня как новичка - это просто бесценная информация! Успехов Вам!

  • @vansowboy
    @vansowboy Před rokem

    Отличный ролик, полезная инфа!) Ждем еще

  • @yauheniramankou5491
    @yauheniramankou5491 Před rokem +2

    Спасибо, полезная информация, как и сама рубрика разбора типичных и не только ошибок)

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

    Все что ты делаешь, все интересно. Продолжай в том же духе!

  • @galichandreyschool
    @galichandreyschool Před rokem

    Замечательный видеоролик! Благодарю за Ваш труд! Успехов! 😊👍

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

    Спасибо большое за такие видео. Просто не представляешь как твой мини-урок помог мне с задачей. Могу скрин потом выслать))) захотелось даже статью а блоге написать)

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

    Плакать от счастья хочется. Очень актуально🥲Спасибо огромное❤❤❤❤❤

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

    Интересно! Давай еще! Спасибо!)

  • @alexanderkomanov4151
    @alexanderkomanov4151 Před rokem +1

    Классно!
    Хотелось бы про useEffect как продолжение ну и про остальные тоже. 😀

  • @YuliyaAnts
    @YuliyaAnts Před rokem

    Очень интересно! Буду ждать видео и для других хуков :)

  • @daniil__kryuchkov
    @daniil__kryuchkov Před rokem

    это ровно то что я искал! жаль что только один хук был описан, жду еще подобных видео, лайк, подписка

  • @andreikrashas7155
    @andreikrashas7155 Před rokem

    Как всегда красавчик, всё по полочкам!

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

    уже заждались новые видео!

  • @andreyh6934
    @andreyh6934 Před 8 měsíci

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

  • @Soap9613
    @Soap9613 Před rokem

    Очень интересно даже того, кто не знает реакт, но знает js! Давай ещё!))

  • @VolodymyrSirenko
    @VolodymyrSirenko Před rokem

    Очень полезное видео, спасибо! Я, как начинающий , не все смог переварить,. но от половины видео есть реальная польза! :)

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

    Продолжай!Спасибо тебе за объяснения!

  • @Sergey-vh3vj
    @Sergey-vh3vj Před rokem

    Спасибо, очень полезно разработчикам любого уровня. С массивами сам в свое время долго мучался и не мог понять.

  • @ivankprod
    @ivankprod Před 7 měsíci

    Неплохие советы) Лайк!

  • @Imperfectwow
    @Imperfectwow Před rokem

    Классный ролик, много для себя подчеркнул.

  • @kentavr16
    @kentavr16 Před rokem

    Хорошее обобщающее видео. Думаю будет интересно увидеть нечто подобное о пропсах.

  • @murrmax1466
    @murrmax1466 Před 8 měsíci

    спасибо большое! Вот тебе комментарий, хотелось бы больше таких видео по реакту!

  • @-rk
    @-rk Před rokem

    Арчаков, большое спасибо!

  • @hello-gq4yi
    @hello-gq4yi Před rokem +2

    Лайк поставлен , комментарий соответственно 🌚🫡

  • @MaximSeleznev
    @MaximSeleznev Před 4 měsíci

    Очень круто! Спасибо!

  • @vladfolk2418
    @vladfolk2418 Před měsícem

    Спасибо большое, благодаря данному видео я теперь не допускаю подобных ошибок!🙏

  • @roshin-1
    @roshin-1 Před rokem

    Спасибо большое! Теперь я понял как это работает)

  • @unknown.6914
    @unknown.6914 Před 5 měsíci

    Как для начинающего разработчика, очень полезное видео, Спасибо !

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

    Очень очень классный ролик. Да и вообще канал крутой. Спасибо за Реакт-пиццу

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

    Спасибо. Стала понятна 2 глава документации React

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

    Супер спасибо!!! Если так разберать все топовые хуки, то будет агонь, агнинский!!!

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

    Огонь! 🔥

  • @T800Cyberdine
    @T800Cyberdine Před rokem +9

    Очень полезный видос! Жалко что не посмотрел его пару недель назад, сэкономил бы кучу своего времени. (к решению пришел сам, перепробовав кучу вариантов и вникнув в суть самой проблемы мутации массивов. Но времени затратил на это немеряно.)

    • @ArchakovBlog
      @ArchakovBlog  Před rokem +5

      молодец, что сам нашёл 👍 в идеале, нужно стараться сначала самому находить решения любым возможным способом и только потом искать его в подобных роликах и других готовых решениях

    • @AmericanDragon134
      @AmericanDragon134 Před rokem

      @@ArchakovBlog а какая у тебя клавиатура?

  • @abikideas
    @abikideas Před rokem

    Ухты, спасибо большое. Столько времени сидел и не понимал, почему меняю state объекта, а ничего не рендерится. Как больно быть новичком в чем-то )

  • @user-rk1nn9xi7o
    @user-rk1nn9xi7o Před 6 měsíci

    действительно полезное видео. спасибо

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

    Супер контент !!

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

    Максимально понятно и доходчиво

  • @Zubairavvv
    @Zubairavvv Před rokem

    Пишу лайк, ставлю комментарий и показываю что мне интересно )

  • @erzhan225
    @erzhan225 Před rokem

    Да, давай ещё эту рубрику

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

    Благодарю, неплохо помог

  • @ihor7307
    @ihor7307 Před rokem

    Круто. Давай про другие хуки. С более конкретными примерами использование

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

    Отличное видео

  • @maronwilsons
    @maronwilsons Před rokem +2

    Денис ждем новый интенсив по Next.js + TypeScript, оч хотим((

  • @stellarlay517
    @stellarlay517 Před 4 měsíci

    Начиная с 10-й минуты, по поводу undefined в users: как-то немного замудренно объяснял) Просто должно быть понимание, что useEffect отрабатывает только ПОСЛЕ рендера компонента. Поэтому и undefined, потому что при рендере useEffect ещё не отработал, а начнет свое выполнение только после отрисовки разметки и уже тогда из-за setUsers произойдет ре-рендер и мы увидим наших пользователей.
    То есть людям нужно донести именно базовое понимание того, почему мы undefined сначала получаем, иначе никто так и не поймет ничего
    А так за видос респект, прошел по основным "грубым" ошибкам!:)

    • @2Extremum
      @2Extremum Před 3 měsíci

      Для понимания надо сначала на этом же канале посмотреть очень понятное видео о useEffect

  • @Oleg_Artemov
    @Oleg_Artemov Před rokem

    очень интересно!
    расскажи пожалуйста про использование хука useLayoutEffect

  • @user-du5zb3zl2b
    @user-du5zb3zl2b Před rokem +1

    Привет) спасибо за видео! а когда будет про (не используй везде useCallback и memo) ?

  • @SeverHolod
    @SeverHolod Před rokem

    Будут ли еще видео по React Native? Жду с нетерпением

  • @deceser8057
    @deceser8057 Před rokem

    Збс, продолжай!

  • @unknownWakeborder
    @unknownWakeborder Před rokem

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

  • @Grigoren_com
    @Grigoren_com Před rokem

    спасибо! хорошо всё.

  • @alekseyberezov8020
    @alekseyberezov8020 Před rokem

    Бро, продолжай пожалуйста!!!

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

    Ролик и интересный и полезный! Сделай пожалуйста по остальным хукам!

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

    Топ тема, делай больше таких видео, я как раз изучаю реакт, и был вопрос как лучше все это использовать нельзя же все хуки использовать на абум

  • @vladimirv787
    @vladimirv787 Před rokem

    Спасибо!

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

    Доброе утро! Про useLayoutEffect() было бы суперкруто :)

  • @LavandaKicK
    @LavandaKicK Před 7 měsíci +2

    Благодарю за видео и вообще контент, очень полезный! Лично мне было бы интересно посмотреть как писать CSR приложение на React, с db на postgres, sequelize-cli, сервер на express, webpack, регистрация-авторизация на JWT(c access token и refresh token), bcrypt, модалки, мультеры(загрузка-выгрузка файлов) и конечно как писать endpoints api и render на бек, всё связывать и защищать. Мне думается что задача сложна для начинающего фулстека, поднять сервак, и на хуках параллельно связывать фронт и бэк. Книжный клуб например. А вообще хотел узнать что за тема в VSCODE??? =))))

  • @javascriptov
    @javascriptov Před rokem +2

    Гоу видос про useCallback | useMemo

  • @-slever-68
    @-slever-68 Před rokem

    Будут ли новые полные курсы (на несколько видосов)? Если да, то будут ли для premiddle/middle и как скоро?

  • @tastebublik
    @tastebublik Před rokem

    Очень ждем новые видео

  • @slavikvasin9095
    @slavikvasin9095 Před rokem +2

    юзколбек и юзмемо ошибки ждем) и хотелось бы больше по тулкиту инфы и парочку мнений на счет актуальности стека через обычный редакс и классы, не приведет ли это к потери актуальности на рынке через пару лет такой работы, при активном развитии тулкита и функциональных комп.
    есть ли смысл ломать голову в коде на классах в 23-24 годах?
    так же хотелось бы услышать мнение о TS, очень многие его нахваливают, но я слышал мнение от очень крутых разрабов, что тс нужен только если ты изначально пишешь хреновый код ибо слабые разрабы хейтят не строгую типизацию, а потом скилапнувшись наоборот восхваляют возможности динамической типизации... как то так

  • @____Olga__
    @____Olga__ Před rokem +3

    Расскажи по возможности, пожалуйста про все костыли useCallback() & useEffect()

  • @haibova_irisha
    @haibova_irisha Před rokem

    привет еще раз ! знаю сейчас не луяшое время , но нету ли в планах сделать какой-то малеьний проект используя react , redux , rtk query , ts ? спасибо

  • @Daemond15
    @Daemond15 Před rokem

    Спасибо за крутотень

  • @dmitrylem7703
    @dmitrylem7703 Před rokem

    Хочу больше роликов про best practices

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

    Топи топи интересно же и залипательно

  • @yoerh
    @yoerh Před rokem +1

    Ждём видео об остальных хуках

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

    Теперь понятно что такое мутация объекта.

  • @mikalai_root
    @mikalai_root Před rokem +1

    Спасибо за некоторые интересные моменты.
    Маленький вопросик: а почему setInterval не убили в ретерне юзэффекта?

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

    Спасибо за видео! Скажи, плиз, почему в случае с работой с массивами опять не воспользоваться функцией и не написать setState(prev => [...prev, newTask])?

  • @haibova_irisha
    @haibova_irisha Před rokem

    Привет , ,с Новым годом ! а можно более подробно о мутациях ? Как правильно использовать с redux toolkit , спасибо

  • @user-tn1yc1ij8d
    @user-tn1yc1ij8d Před rokem +2

    Гоу видосы про useForm и про валидацию

  • @raff_m_d6971
    @raff_m_d6971 Před rokem

    Формат отличный

  • @Albert-pm6uf
    @Albert-pm6uf Před rokem

    Можете подсказать как сделать такое же плавное перемещение курсора?

  • @joper3703
    @joper3703 Před rokem

    Да, давай пожалуйста про useMemo и useCallback

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

    В первом случае что нам мешает добавить count в массив зависимости в useEffect?

  • @azizoid
    @azizoid Před rokem +1

    А почему в примере с тасками вы не работаете с предыдущими значениями как в первом примере?

  • @goqorhovhannisyan2048

    Привет Арчаков, пожалуйста, сделайте видео о миксе useContext + useReducer в качестве замены Redux-а.

  • @jamjam3337
    @jamjam3337 Před rokem

    👏👍

  • @arturmavlidov247
    @arturmavlidov247 Před rokem

    ❤‍🔥

  • @dpoleev
    @dpoleev Před rokem

    Подскажи, есть ли у тебя что ни будь. где рассказываешь как запустить перерисовку наружних компонентов из внутренних?

    • @mikalai_root
      @mikalai_root Před rokem

      Перерендер родителя из потомка?
      1. Callback функцией, переданной как пропс.
      2. Изменение переменной глобального стэйта приложения ( пример с условным редаксом: в чайлде используешь диспатч и изменяешь переменную, которая используется в родителе.). Наверняка есть ещё какие-нибудь извращённые способы, типо поиска элементов родителя в dom дереве и прямые манипуляции нативным джаваскриптом( всякие append и т.д.)

  • @lukts7839
    @lukts7839 Před rokem

    Спасибо за видео. Чнм больше хуков, тем лучше.

  • @tanercoder1915
    @tanercoder1915 Před rokem

    Важно также возвращать cleanup callback из useEffect когда есть любые подписки и счётчики.

  • @haibova_irisha
    @haibova_irisha Před rokem

    Спасибо большое !!! очень крутая подача ) а на boosty ты ессть новый контент ?

    • @ArchakovBlog
      @ArchakovBlog  Před rokem +1

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

    • @haibova_irisha
      @haibova_irisha Před rokem

      @@ArchakovBlog
      спасибо

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

    👍

  • @endoscopy8351
    @endoscopy8351 Před rokem +1

    А как сделать подсказки в выпадающем списке, как на 20:29?

  • @algum4678
    @algum4678 Před rokem

    Про usememo с использованием react devtools (как проверять лишние отрисовки) пожалуйста расскажи

  • @nexakasaki
    @nexakasaki Před rokem

    Норм, новичкам самое то

  • @uicodeuz
    @uicodeuz Před rokem +1

    Кайф

  • @arman-6172
    @arman-6172 Před 8 měsíci

    18:20
    Привет.
    Что думаешь, если всегда использовать в таком виде:
    setTask((tasks) => [...task, text])
    какие плюсы:
    1. Ты всегда работаешь с данными, которые хранит хук
    2. Если нужно будет юзать Memo или в useState хранится объект, который нужно менять от других эффектов, то не нужно будет условный tasks прописывать в зависимости эффектов
    🤔

  • @killd0z3r
    @killd0z3r Před rokem

    Подскажите, кто знает как цветовая тема называется? Спасибо тем кто ответит

  • @NovikovEugene84
    @NovikovEugene84 Před 3 měsíci

    Ну это прям база

  • @Santos20004
    @Santos20004 Před měsícem

    а в самом первом примере если useEffect то почему не просто посадить count массив для отслеживания? и как так завести интервал и не убить его в return прорисовку count вообще вынести за пределы useEffect?

  • @multtanker6365
    @multtanker6365 Před rokem

    Когда будет next pizza?)