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

Поделиться
HTML-код
  • Опубликовано: 22 май 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 #реакт #разработка

Комментарии • 167

  • @GroundGamer
    @GroundGamer Год назад +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 Год назад +1

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

    • @GroundGamer
      @GroundGamer Год назад +1

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

    • @kawaikaino5277
      @kawaikaino5277 Год назад

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

    • @lirrr6555
      @lirrr6555 Год назад +1

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

    • @GroundGamer
      @GroundGamer Год назад

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

  • @serjmarkelov9915
    @serjmarkelov9915 Год назад +18

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

    • @user-wl2xp8yo6x
      @user-wl2xp8yo6x Год назад +4

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

    • @connectw
      @connectw 10 месяцев назад

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

    • @TonyPony7
      @TonyPony7 7 месяцев назад

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

  • @user-le6ly6ri6t
    @user-le6ly6ri6t Год назад +1

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

  • @rustamakhmetyanov4404
    @rustamakhmetyanov4404 Год назад +5

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

  • @jimsaharov
    @jimsaharov Год назад

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

  • @nafisgarifullin7199
    @nafisgarifullin7199 11 месяцев назад

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

  • @ArtDen100
    @ArtDen100 Год назад +3

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

  • @yauheniramankou5491
    @yauheniramankou5491 Год назад +2

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

  • @galichandreyschool
    @galichandreyschool Год назад

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

  • @dmitriykarabasov1440
    @dmitriykarabasov1440 Год назад

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

  • @vansowboy
    @vansowboy Год назад

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

  • @user-pw3zu1ed4v
    @user-pw3zu1ed4v Год назад

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

  • @user-hu4fy4ce1f
    @user-hu4fy4ce1f Год назад

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

  • @MaximSeleznev
    @MaximSeleznev 4 месяца назад

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

  • @alexanderkomanov4151
    @alexanderkomanov4151 Год назад +1

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

  • @user-dn4ry3uw8i
    @user-dn4ry3uw8i Год назад

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

  • @Sergey-vh3vj
    @Sergey-vh3vj Год назад

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

  • @daniil__kryuchkov
    @daniil__kryuchkov Год назад

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

  • @user-si8tx5sk9s
    @user-si8tx5sk9s Год назад

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

  • @VolodymyrSirenko
    @VolodymyrSirenko Год назад

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

  • @ivankprod
    @ivankprod 6 месяцев назад

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

  • @user-hd5op3rt3e
    @user-hd5op3rt3e Год назад

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

  • @kentavr16
    @kentavr16 Год назад

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

  • @vladfolk2418
    @vladfolk2418 28 дней назад

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

  • @andreyh6934
    @andreyh6934 7 месяцев назад

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

  • @YuliyaAnts
    @YuliyaAnts Год назад

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

  • @andreikrashas7155
    @andreikrashas7155 Год назад

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

  • @user-fq4pc7fm2z
    @user-fq4pc7fm2z Год назад

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

  • @Imperfectwow
    @Imperfectwow Год назад

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

  • @-rk
    @-rk Год назад

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

  • @user-kt7fm6ow4p
    @user-kt7fm6ow4p 5 месяцев назад

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

  • @murrmax1466
    @murrmax1466 8 месяцев назад

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

  • @user-rk1nn9xi7o
    @user-rk1nn9xi7o 5 месяцев назад

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

  • @Soap9613
    @Soap9613 Год назад

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

  • @roshin-1
    @roshin-1 Год назад

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

  • @abikideas
    @abikideas Год назад

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

  • @unknown.6914
    @unknown.6914 5 месяцев назад

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

  • @hello-gq4yi
    @hello-gq4yi Год назад +2

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

  • @user-eg2nn4ww7r
    @user-eg2nn4ww7r Год назад

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

  • @user-gp5cq8pp1o
    @user-gp5cq8pp1o Год назад

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

  • @unknownWakeborder
    @unknownWakeborder Год назад

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

  • @user-wt8sq9om6c
    @user-wt8sq9om6c Год назад

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

  • @Oleg_Artemov
    @Oleg_Artemov Год назад

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

  • @saperovtop
    @saperovtop 10 месяцев назад

    Огонь! 🔥

  • @samiroutka
    @samiroutka 10 месяцев назад

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

  • @user-nb7cv5px1v
    @user-nb7cv5px1v Год назад

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

  • @Grigoren_com
    @Grigoren_com Год назад

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

  • @user-qd5rj5iz3h
    @user-qd5rj5iz3h Год назад

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

  • @ihor7307
    @ihor7307 Год назад

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

  • @T800Cyberdine
    @T800Cyberdine Год назад +9

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

    • @ArchakovBlog
      @ArchakovBlog  Год назад +5

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

    • @AmericanDragon134
      @AmericanDragon134 Год назад

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

  • @vladimirv787
    @vladimirv787 Год назад

    Спасибо!

  • @Zubairavvv
    @Zubairavvv Год назад

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

  • @user-dp1ke7bx7c
    @user-dp1ke7bx7c Год назад

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

  • @LavandaKicK
    @LavandaKicK 6 месяцев назад +2

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

  • @deceser8057
    @deceser8057 Год назад

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

  • @kspshnik
    @kspshnik 10 месяцев назад

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

  • @stellarlay517
    @stellarlay517 3 месяца назад

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

    • @2Extremum
      @2Extremum 2 месяца назад

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

  • @user-du5zb3zl2b
    @user-du5zb3zl2b Год назад +1

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

  • @user-mv8bu5jy2n
    @user-mv8bu5jy2n Год назад

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

  • @slavikvasin9095
    @slavikvasin9095 Год назад +2

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

  • @SeverHolod
    @SeverHolod Год назад

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

  • @erzhan225
    @erzhan225 Год назад

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

  • @alekseyberezov8020
    @alekseyberezov8020 Год назад

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

  • @Daemond15
    @Daemond15 Год назад

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

  • @tastebublik
    @tastebublik Год назад

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

  • @-slever-68
    @-slever-68 Год назад

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

  • @maronwilsons
    @maronwilsons Год назад +2

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

  • @raff_m_d6971
    @raff_m_d6971 Год назад

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

  • @haibova_irisha
    @haibova_irisha Год назад

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

  • @user-ic4dk4sp3y
    @user-ic4dk4sp3y Год назад

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

  • @____Olga__
    @____Olga__ Год назад +3

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

  • @haibova_irisha
    @haibova_irisha Год назад

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

  • @dmitrylem7703
    @dmitrylem7703 Год назад

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

  • @mikalai_root
    @mikalai_root Год назад +1

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

  • @tanercoder1915
    @tanercoder1915 Год назад

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

  • @yoerh
    @yoerh Год назад +1

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

  • @arman-6172
    @arman-6172 8 месяцев назад

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

  • @user-dp1ke7bx7c
    @user-dp1ke7bx7c Год назад

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

  • @stanislavsapogov9268
    @stanislavsapogov9268 6 месяцев назад

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

  • @javascriptov
    @javascriptov Год назад +2

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

  • @haibova_irisha
    @haibova_irisha Год назад

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

    • @ArchakovBlog
      @ArchakovBlog  Год назад +1

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

    • @haibova_irisha
      @haibova_irisha Год назад

      @@ArchakovBlog
      спасибо

  • @joper3703
    @joper3703 Год назад

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

  • @jamjam3337
    @jamjam3337 Год назад

    👏👍

  • @goqorhovhannisyan2048
    @goqorhovhannisyan2048 Год назад

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

  • @user-tn1yc1ij8d
    @user-tn1yc1ij8d Год назад +2

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

  • @azizoid
    @azizoid Год назад +1

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

  • @user-yo7bj9yj3g
    @user-yo7bj9yj3g Год назад

    👍

  • @arturmavlidov247
    @arturmavlidov247 Год назад

    ❤‍🔥

  • @user-tr8gr6bl2u
    @user-tr8gr6bl2u Год назад

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

  • @serheyjankowsky6899
    @serheyjankowsky6899 Год назад

    setState(prev=>), вызывает общий стейт у компонента который ты будешь использовать на одной странице , пример : толерантный с 3 значениями которые ты можешь переключать , создаешь несколько элементов на странице , начинаешь переключать , и воля у тебя во всех компонентах меняется значения , хотя ты в других его не менял , так что нужно быть аккуратным

    • @kaze9308
      @kaze9308 10 месяцев назад

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

  • @lukts7839
    @lukts7839 Год назад

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

  • @uicodeuz
    @uicodeuz Год назад +1

    Кайф

  • @Albert-pm6uf
    @Albert-pm6uf Год назад

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

  • @dpoleev
    @dpoleev Год назад

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

    • @mikalai_root
      @mikalai_root Год назад

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

  • @algum4678
    @algum4678 Год назад

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

  • @nexakasaki
    @nexakasaki Год назад

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

  • @Santos20004
    @Santos20004 Месяц назад

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

  • @NovikovEugene84
    @NovikovEugene84 2 месяца назад

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

  • @ryskin82
    @ryskin82 Год назад

    Хочешь удалить из списка элемент делай просто filter c нужными условиями

  • @endoscopy8351
    @endoscopy8351 Год назад +1

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