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

  Рет қаралды 47,901

Archakov Blog

Archakov Blog

Күн бұрын

Часто начинающие 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 Жыл бұрын
Если объяснить весь ролик коротко, то вот: 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 Жыл бұрын
а почему именно splice, а не скажем .filter ? )
@GroundGamer
@GroundGamer Жыл бұрын
@@kawaikaino5277 я лично выбрал splice, чтобы проще делать отладку, в случае чего-то. Кнч, можно сделать что-то такое: 1. const formedTasks = state.filter(...) 2. return formedTasks Но также, в splice ты можешь начать с индекса таски, которую тебе нужно удалить, а не идти по целому списку. Как бы да, ты используешь проход по массиву, так как и filter, но в конкретном случае, как я понимаю, splice начинает с определённого индекса массива и затем уже делает те действия, которые нам нужны. По поводу "проход по массиву", я начал разъяснять так, как примерно работает под капотом Если в чём-то не прав, поправьте меня пожалуйста))
@kawaikaino5277
@kawaikaino5277 Жыл бұрын
​@@GroundGamer По поводу, прохода по всему массиву, при использовании filter. а. В большинстве случаев, это экономия на муравьях, т.к чаще всего не приходится работать с длинными массивами б. Ну уж, если пришлось обработать длинный, на сколько мне известно движок под капотом оптимизирует выполнение filter (но это не точно) Спасибо за ответ
@lirrr6555
@lirrr6555 Жыл бұрын
@@GroundGamer зачем здесь переменная formedTasks? filter иммутабелен, можно сразу делать return state.filter(...)
@GroundGamer
@GroundGamer Жыл бұрын
@@lirrr6555 Можно, конечно. В целом, хоть однострочные решения и "красивы", но иногда, они сложны для отладки, допустим когда у нас в фильтре (или ещё в каком либо методе массива), содержится ещё один массив по которому нам нужно пройтись, и вся их "красота" перестаёт быть "красотой" и превращается в "чудовище", которое ещё бывает сложно прочитать разрабу. Поэтому, я выбрал для себя такое написание переменных, как за основу
@serjmarkelov9915
@serjmarkelov9915 Жыл бұрын
Я перерыл много обучающих видео на youtube включая англоязычные, но твоя подача контента и умение объяснять превосходят всё и вся. Спасибо большое)
@user-wl2xp8yo6x
@user-wl2xp8yo6x Жыл бұрын
мне кажется ты просто плохо ищешь)) Многие штуки он берет как раз из зарубежного ютуба.
@connectw
@connectw 10 ай бұрын
@@user-wl2xp8yo6x Привет. Можешь порекомендовать зарубежных ютуберов по реакту?
@TonyPony7
@TonyPony7 7 ай бұрын
нигде не обходится без льстецов!
@user-le6ly6ri6t
@user-le6ly6ri6t Жыл бұрын
Огромная благодарность за такое видео про особенности useState! Будем ждать про другие хуки в том же формате!
@rustamakhmetyanov4404
@rustamakhmetyanov4404 Жыл бұрын
Спасибо за работу, любое обучающее видео от вас интересно, тем более такого формата. Интересен ещё useEffect с его побочками и проблемами.
@nafisgarifullin7199
@nafisgarifullin7199 11 ай бұрын
Очень все понятно и доступно, спасибо тебе за такой классный материал 👍 Таких очень мало, кто может объяснить так доходчиво и просто
@yauheniramankou5491
@yauheniramankou5491 Жыл бұрын
Спасибо, полезная информация, как и сама рубрика разбора типичных и не только ошибок)
@dmitriykarabasov1440
@dmitriykarabasov1440 Жыл бұрын
Отличный контент! Продолжайте, мы ждём!
@jimsaharov
@jimsaharov Жыл бұрын
Спасибо за урок! Очень грамотно объясняете материал и к тому же в таких тонкостях. Для меня как новичка - это просто бесценная информация! Успехов Вам!
@ArtDen100
@ArtDen100 Жыл бұрын
Ты невероятно круто объясняешь!!! Запиши видео по всем основным хукам, это будет супер
@vansowboy
@vansowboy Жыл бұрын
Отличный ролик, полезная инфа!) Ждем еще
@galichandreyschool
@galichandreyschool Жыл бұрын
Замечательный видеоролик! Благодарю за Ваш труд! Успехов! 😊👍
@user-dn4ry3uw8i
@user-dn4ry3uw8i Жыл бұрын
Плакать от счастья хочется. Очень актуально🥲Спасибо огромное❤❤❤❤❤
@user-hu4fy4ce1f
@user-hu4fy4ce1f Жыл бұрын
Все что ты делаешь, все интересно. Продолжай в том же духе!
@user-hd5op3rt3e
@user-hd5op3rt3e Жыл бұрын
Интересно! Давай еще! Спасибо!)
@Sergey-vh3vj
@Sergey-vh3vj Жыл бұрын
Спасибо, очень полезно разработчикам любого уровня. С массивами сам в свое время долго мучался и не мог понять.
@andreikrashas7155
@andreikrashas7155 Жыл бұрын
Как всегда красавчик, всё по полочкам!
@user-fq4pc7fm2z
@user-fq4pc7fm2z Жыл бұрын
уже заждались новые видео!
@user-pw3zu1ed4v
@user-pw3zu1ed4v Жыл бұрын
Спасибо большое за такие видео. Просто не представляешь как твой мини-урок помог мне с задачей. Могу скрин потом выслать))) захотелось даже статью а блоге написать)
@user-si8tx5sk9s
@user-si8tx5sk9s Жыл бұрын
Продолжай!Спасибо тебе за объяснения!
@-rk
@-rk Жыл бұрын
Арчаков, большое спасибо!
@VolodymyrSirenko
@VolodymyrSirenko Жыл бұрын
Очень полезное видео, спасибо! Я, как начинающий , не все смог переварить,. но от половины видео есть реальная польза! :)
@alexanderkomanov4151
@alexanderkomanov4151 Жыл бұрын
Классно! Хотелось бы про useEffect как продолжение ну и про остальные тоже. 😀
@vladfolk2418
@vladfolk2418 Ай бұрын
Спасибо большое, благодаря данному видео я теперь не допускаю подобных ошибок!🙏
@daniil__kryuchkov
@daniil__kryuchkov Жыл бұрын
это ровно то что я искал! жаль что только один хук был описан, жду еще подобных видео, лайк, подписка
@Imperfectwow
@Imperfectwow Жыл бұрын
Классный ролик, много для себя подчеркнул.
@YuliyaAnts
@YuliyaAnts Жыл бұрын
Очень интересно! Буду ждать видео и для других хуков :)
@kentavr16
@kentavr16 Жыл бұрын
Хорошее обобщающее видео. Думаю будет интересно увидеть нечто подобное о пропсах.
@Soap9613
@Soap9613 Жыл бұрын
Очень интересно даже того, кто не знает реакт, но знает js! Давай ещё!))
@MaximSeleznev
@MaximSeleznev 4 ай бұрын
Очень круто! Спасибо!
@abikideas
@abikideas Жыл бұрын
Ухты, спасибо большое. Столько времени сидел и не понимал, почему меняю state объекта, а ничего не рендерится. Как больно быть новичком в чем-то )
@murrmax1466
@murrmax1466 8 ай бұрын
спасибо большое! Вот тебе комментарий, хотелось бы больше таких видео по реакту!
@unknown.6914
@unknown.6914 5 ай бұрын
Как для начинающего разработчика, очень полезное видео, Спасибо !
@T800Cyberdine
@T800Cyberdine Жыл бұрын
Очень полезный видос! Жалко что не посмотрел его пару недель назад, сэкономил бы кучу своего времени. (к решению пришел сам, перепробовав кучу вариантов и вникнув в суть самой проблемы мутации массивов. Но времени затратил на это немеряно.)
@ArchakovBlog
@ArchakovBlog Жыл бұрын
молодец, что сам нашёл 👍 в идеале, нужно стараться сначала самому находить решения любым возможным способом и только потом искать его в подобных роликах и других готовых решениях
@AmericanDragon134
@AmericanDragon134 Жыл бұрын
@@ArchakovBlog а какая у тебя клавиатура?
@ivankprod
@ivankprod 7 ай бұрын
Неплохие советы) Лайк!
@stellarlay517
@stellarlay517 4 ай бұрын
Начиная с 10-й минуты, по поводу undefined в users: как-то немного замудренно объяснял) Просто должно быть понимание, что useEffect отрабатывает только ПОСЛЕ рендера компонента. Поэтому и undefined, потому что при рендере useEffect ещё не отработал, а начнет свое выполнение только после отрисовки разметки и уже тогда из-за setUsers произойдет ре-рендер и мы увидим наших пользователей. То есть людям нужно донести именно базовое понимание того, почему мы undefined сначала получаем, иначе никто так и не поймет ничего А так за видос респект, прошел по основным "грубым" ошибкам!:)
@2Extremum
@2Extremum 3 ай бұрын
Для понимания надо сначала на этом же канале посмотреть очень понятное видео о useEffect
@user-kt7fm6ow4p
@user-kt7fm6ow4p 5 ай бұрын
Спасибо. Стала понятна 2 глава документации React
@andreyh6934
@andreyh6934 8 ай бұрын
Спасибо! очень классно объясняешь! Продолжай в том же духе и будет зашибись. ))
@unknownWakeborder
@unknownWakeborder Жыл бұрын
Будет полезной инфа про основные хуки и их работу под капотом, а так же их стоимость выполнения, это поможет лучше понимать когда стоит их применять.
@user-eg2nn4ww7r
@user-eg2nn4ww7r Жыл бұрын
Максимально понятно и доходчиво
@saperovtop
@saperovtop 10 ай бұрын
Огонь! 🔥
@roshin-1
@roshin-1 Жыл бұрын
Спасибо большое! Теперь я понял как это работает)
@user-wt8sq9om6c
@user-wt8sq9om6c Жыл бұрын
Супер спасибо!!! Если так разберать все топовые хуки, то будет агонь, агнинский!!!
@hello-gq4yi
@hello-gq4yi Жыл бұрын
Лайк поставлен , комментарий соответственно 🌚🫡
@user-dp1ke7bx7c
@user-dp1ke7bx7c Жыл бұрын
Супер контент !!
@user-rk1nn9xi7o
@user-rk1nn9xi7o 6 ай бұрын
действительно полезное видео. спасибо
@Zubairavvv
@Zubairavvv Жыл бұрын
Пишу лайк, ставлю комментарий и показываю что мне интересно )
@Oleg_Artemov
@Oleg_Artemov Жыл бұрын
очень интересно! расскажи пожалуйста про использование хука useLayoutEffect
@user-nb7cv5px1v
@user-nb7cv5px1v Жыл бұрын
Очень очень классный ролик. Да и вообще канал крутой. Спасибо за Реакт-пиццу
@ihor7307
@ihor7307 Жыл бұрын
Круто. Давай про другие хуки. С более конкретными примерами использование
@haibova_irisha
@haibova_irisha Жыл бұрын
привет еще раз ! знаю сейчас не луяшое время , но нету ли в планах сделать какой-то малеьний проект используя react , redux , rtk query , ts ? спасибо
@deceser8057
@deceser8057 Жыл бұрын
Збс, продолжай!
@erzhan225
@erzhan225 Жыл бұрын
Да, давай ещё эту рубрику
@maronwilsons
@maronwilsons Жыл бұрын
Денис ждем новый интенсив по Next.js + TypeScript, оч хотим((
@user-gp5cq8pp1o
@user-gp5cq8pp1o Жыл бұрын
Топ тема, делай больше таких видео, я как раз изучаю реакт, и был вопрос как лучше все это использовать нельзя же все хуки использовать на абум
@LavandaKicK
@LavandaKicK 7 ай бұрын
Благодарю за видео и вообще контент, очень полезный! Лично мне было бы интересно посмотреть как писать CSR приложение на React, с db на postgres, sequelize-cli, сервер на express, webpack, регистрация-авторизация на JWT(c access token и refresh token), bcrypt, модалки, мультеры(загрузка-выгрузка файлов) и конечно как писать endpoints api и render на бек, всё связывать и защищать. Мне думается что задача сложна для начинающего фулстека, поднять сервак, и на хуках параллельно связывать фронт и бэк. Книжный клуб например. А вообще хотел узнать что за тема в VSCODE??? =))))
@user-qd5rj5iz3h
@user-qd5rj5iz3h Жыл бұрын
Отличное видео
@samiroutka
@samiroutka 11 ай бұрын
Благодарю, неплохо помог
@user-mv8bu5jy2n
@user-mv8bu5jy2n Жыл бұрын
Ролик и интересный и полезный! Сделай пожалуйста по остальным хукам!
@slavikvasin9095
@slavikvasin9095 Жыл бұрын
юзколбек и юзмемо ошибки ждем) и хотелось бы больше по тулкиту инфы и парочку мнений на счет актуальности стека через обычный редакс и классы, не приведет ли это к потери актуальности на рынке через пару лет такой работы, при активном развитии тулкита и функциональных комп. есть ли смысл ломать голову в коде на классах в 23-24 годах? так же хотелось бы услышать мнение о TS, очень многие его нахваливают, но я слышал мнение от очень крутых разрабов, что тс нужен только если ты изначально пишешь хреновый код ибо слабые разрабы хейтят не строгую типизацию, а потом скилапнувшись наоборот восхваляют возможности динамической типизации... как то так
@-slever-68
@-slever-68 Жыл бұрын
Будут ли новые полные курсы (на несколько видосов)? Если да, то будут ли для premiddle/middle и как скоро?
@SeverHolod
@SeverHolod Жыл бұрын
Будут ли еще видео по React Native? Жду с нетерпением
@vladimirv787
@vladimirv787 Жыл бұрын
Спасибо!
@Grigoren_com
@Grigoren_com Жыл бұрын
спасибо! хорошо всё.
@stanislavsapogov9268
@stanislavsapogov9268 6 ай бұрын
Спасибо за видео! Скажи, плиз, почему в случае с работой с массивами опять не воспользоваться функцией и не написать setState(prev => [...prev, newTask])?
@user-du5zb3zl2b
@user-du5zb3zl2b Жыл бұрын
Привет) спасибо за видео! а когда будет про (не используй везде useCallback и memo) ?
@____Olga__
@____Olga__ Жыл бұрын
Расскажи по возможности, пожалуйста про все костыли useCallback() & useEffect()
@mikalai_root
@mikalai_root Жыл бұрын
Спасибо за некоторые интересные моменты. Маленький вопросик: а почему setInterval не убили в ретерне юзэффекта?
@alekseyberezov8020
@alekseyberezov8020 Жыл бұрын
Бро, продолжай пожалуйста!!!
@tanercoder1915
@tanercoder1915 Жыл бұрын
Важно также возвращать cleanup callback из useEffect когда есть любые подписки и счётчики.
@haibova_irisha
@haibova_irisha Жыл бұрын
Привет , ,с Новым годом ! а можно более подробно о мутациях ? Как правильно использовать с redux toolkit , спасибо
@Albert-pm6uf
@Albert-pm6uf Жыл бұрын
Можете подсказать как сделать такое же плавное перемещение курсора?
@user-tr8gr6bl2u
@user-tr8gr6bl2u Жыл бұрын
В первом случае что нам мешает добавить count в массив зависимости в useEffect?
@kspshnik
@kspshnik 11 ай бұрын
Доброе утро! Про useLayoutEffect() было бы суперкруто :)
@raff_m_d6971
@raff_m_d6971 Жыл бұрын
Формат отличный
@user-dp1ke7bx7c
@user-dp1ke7bx7c Жыл бұрын
Теперь понятно что такое мутация объекта.
@azizoid
@azizoid Жыл бұрын
А почему в примере с тасками вы не работаете с предыдущими значениями как в первом примере?
@arman-6172
@arman-6172 8 ай бұрын
18:20 Привет. Что думаешь, если всегда использовать в таком виде: setTask((tasks) => [...task, text]) какие плюсы: 1. Ты всегда работаешь с данными, которые хранит хук 2. Если нужно будет юзать Memo или в useState хранится объект, который нужно менять от других эффектов, то не нужно будет условный tasks прописывать в зависимости эффектов 🤔
@Daemond15
@Daemond15 Жыл бұрын
Спасибо за крутотень
@javascriptov
@javascriptov Жыл бұрын
Гоу видос про useCallback | useMemo
@serheyjankowsky6899
@serheyjankowsky6899 Жыл бұрын
setState(prev=>), вызывает общий стейт у компонента который ты будешь использовать на одной странице , пример : толерантный с 3 значениями которые ты можешь переключать , создаешь несколько элементов на странице , начинаешь переключать , и воля у тебя во всех компонентах меняется значения , хотя ты в других его не менял , так что нужно быть аккуратным
@kaze9308
@kaze9308 11 ай бұрын
так это корректная работа useState ведь. он хранит одно состояние, несмотря на то, что разные компоненты снизу используют его
@dpoleev
@dpoleev Жыл бұрын
Подскажи, есть ли у тебя что ни будь. где рассказываешь как запустить перерисовку наружних компонентов из внутренних?
@mikalai_root
@mikalai_root Жыл бұрын
Перерендер родителя из потомка? 1. Callback функцией, переданной как пропс. 2. Изменение переменной глобального стэйта приложения ( пример с условным редаксом: в чайлде используешь диспатч и изменяешь переменную, которая используется в родителе.). Наверняка есть ещё какие-нибудь извращённые способы, типо поиска элементов родителя в dom дереве и прямые манипуляции нативным джаваскриптом( всякие append и т.д.)
@tastebublik
@tastebublik Жыл бұрын
Очень ждем новые видео
@dmitrylem7703
@dmitrylem7703 Жыл бұрын
Хочу больше роликов про best practices
@goqorhovhannisyan2048
@goqorhovhannisyan2048 Жыл бұрын
Привет Арчаков, пожалуйста, сделайте видео о миксе useContext + useReducer в качестве замены Redux-а.
@killd0z3r
@killd0z3r Жыл бұрын
Подскажите, кто знает как цветовая тема называется? Спасибо тем кто ответит
@haibova_irisha
@haibova_irisha Жыл бұрын
Спасибо большое !!! очень крутая подача ) а на boosty ты ессть новый контент ?
@ArchakovBlog
@ArchakovBlog Жыл бұрын
Сначала новый контент выходит там. Это видео появилось в Ютубе через неделю только, поле бусти
@haibova_irisha
@haibova_irisha Жыл бұрын
@@ArchakovBlog спасибо
@yoerh
@yoerh Жыл бұрын
Ждём видео об остальных хуках
@joper3703
@joper3703 Жыл бұрын
Да, давай пожалуйста про useMemo и useCallback
@Santos20004
@Santos20004 Ай бұрын
а в самом первом примере если useEffect то почему не просто посадить count массив для отслеживания? и как так завести интервал и не убить его в return прорисовку count вообще вынести за пределы useEffect?
@algum4678
@algum4678 Жыл бұрын
Про usememo с использованием react devtools (как проверять лишние отрисовки) пожалуйста расскажи
@user-ic4dk4sp3y
@user-ic4dk4sp3y Жыл бұрын
Топи топи интересно же и залипательно
@endoscopy8351
@endoscopy8351 Жыл бұрын
А как сделать подсказки в выпадающем списке, как на 20:29?
@jamjam3337
@jamjam3337 Жыл бұрын
👏👍
@user-tn1yc1ij8d
@user-tn1yc1ij8d Жыл бұрын
Гоу видосы про useForm и про валидацию
@lukts7839
@lukts7839 Жыл бұрын
Спасибо за видео. Чнм больше хуков, тем лучше.
@user-yo7bj9yj3g
@user-yo7bj9yj3g Жыл бұрын
👍
@arturmavlidov247
@arturmavlidov247 Жыл бұрын
❤‍🔥
@nexakasaki
@nexakasaki Жыл бұрын
Норм, новичкам самое то
@ryskin82
@ryskin82 Жыл бұрын
Хочешь удалить из списка элемент делай просто filter c нужными условиями
@Vansun0077
@Vansun0077 7 ай бұрын
Хмм, я вот редактирую элементы в масиве немного по другому, в видео автор делает map, тоесть проходиться по всему массиву, я же в самом setState, ищу элемент по индексу const editItem = state/previousState[index] , потом его редактирую и потом возвращаю новый масив с отредактированным элементом. Я так подозреваю что в видео способ получше ? Ибо для меня такая логика, меньше циклов-лучше способ.
#3: React Hooks - useRef
27:52
Archakov Blog
Рет қаралды 63 М.
it takes two to tango 💃🏻🕺🏻
00:18
Zach King
Рет қаралды 32 МЛН
$10,000 Every Day You Survive In The Wilderness
26:44
MrBeast
Рет қаралды 66 МЛН
Sigma Girl Education #sigma #viral #comedy
00:16
CRAZY GREAPA
Рет қаралды 88 МЛН
Зачем на самом деле нужен хук useCallback
8:33
Михаил Непомнящий
Рет қаралды 37 М.
#1: React Hooks - useState
27:47
Archakov Blog
Рет қаралды 62 М.
React и Next js убивают фронтенд!
9:11
Миша Ларченко
Рет қаралды 42 М.
Разбираем хуки (hooks) в React по доке и на примере todo листа | уроки JavaScript
1:06:51
Елена Литвинова — Искусство Веб-разработки 🛸
Рет қаралды 21 М.
Почему удалять StrictMode плохая идея?
9:30
АйТи Синяк
Рет қаралды 16 М.
#2: React Hooks | Реакт Хук useEffect за 10 минут | React Hook useEffect
10:55
Типичный Веб Разработчик
Рет қаралды 1,6 М.
it takes two to tango 💃🏻🕺🏻
00:18
Zach King
Рет қаралды 32 МЛН