Тёмный

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

Archakov Blog
Подписаться 69 тыс.
Просмотров 49 тыс.
50% 1

Часто начинающие 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 #реакт #разработка

Опубликовано:

 

25 июн 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 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 11 месяцев назад
@@user-wl2xp8yo6x Привет. Можешь порекомендовать зарубежных ютуберов по реакту?
@TonyPony7
@TonyPony7 8 месяцев назад
нигде не обходится без льстецов!
@rustamakhmetyanov4404
@rustamakhmetyanov4404 Год назад
Спасибо за работу, любое обучающее видео от вас интересно, тем более такого формата. Интересен ещё useEffect с его побочками и проблемами.
@dmitriykarabasov1440
@dmitriykarabasov1440 Год назад
Отличный контент! Продолжайте, мы ждём!
@nafisgarifullin7199
@nafisgarifullin7199 Год назад
Очень все понятно и доступно, спасибо тебе за такой классный материал 👍 Таких очень мало, кто может объяснить так доходчиво и просто
@vansowboy
@vansowboy Год назад
Отличный ролик, полезная инфа!) Ждем еще
@yauheniramankou5491
@yauheniramankou5491 Год назад
Спасибо, полезная информация, как и сама рубрика разбора типичных и не только ошибок)
@jimsaharov
@jimsaharov Год назад
Спасибо за урок! Очень грамотно объясняете материал и к тому же в таких тонкостях. Для меня как новичка - это просто бесценная информация! Успехов Вам!
@galichandreyschool
@galichandreyschool Год назад
Замечательный видеоролик! Благодарю за Ваш труд! Успехов! 😊👍
@user-hd5op3rt3e
@user-hd5op3rt3e Год назад
Интересно! Давай еще! Спасибо!)
@user-hu4fy4ce1f
@user-hu4fy4ce1f Год назад
Все что ты делаешь, все интересно. Продолжай в том же духе!
@user-dn4ry3uw8i
@user-dn4ry3uw8i Год назад
Плакать от счастья хочется. Очень актуально🥲Спасибо огромное❤❤❤❤❤
@andreikrashas7155
@andreikrashas7155 Год назад
Как всегда красавчик, всё по полочкам!
@user-fq4pc7fm2z
@user-fq4pc7fm2z Год назад
уже заждались новые видео!
@ArtDen100
@ArtDen100 Год назад
Ты невероятно круто объясняешь!!! Запиши видео по всем основным хукам, это будет супер
@user-si8tx5sk9s
@user-si8tx5sk9s Год назад
Продолжай!Спасибо тебе за объяснения!
@ivankprod
@ivankprod 8 месяцев назад
Неплохие советы) Лайк!
@Sergey-vh3vj
@Sergey-vh3vj Год назад
Спасибо, очень полезно разработчикам любого уровня. С массивами сам в свое время долго мучался и не мог понять.
@-rk
@-rk Год назад
Арчаков, большое спасибо!
@user-kt7fm6ow4p
@user-kt7fm6ow4p 6 месяцев назад
Спасибо. Стала понятна 2 глава документации React
@vladfolk2418
@vladfolk2418 2 месяца назад
Спасибо большое, благодаря данному видео я теперь не допускаю подобных ошибок!🙏
@Imperfectwow
@Imperfectwow Год назад
Классный ролик, много для себя подчеркнул.
@andreyh6934
@andreyh6934 8 месяцев назад
Спасибо! очень классно объясняешь! Продолжай в том же духе и будет зашибись. ))
@user-pw3zu1ed4v
@user-pw3zu1ed4v Год назад
Спасибо большое за такие видео. Просто не представляешь как твой мини-урок помог мне с задачей. Могу скрин потом выслать))) захотелось даже статью а блоге написать)
@YuliyaAnts
@YuliyaAnts Год назад
Очень интересно! Буду ждать видео и для других хуков :)
@daniil__kryuchkov
@daniil__kryuchkov Год назад
это ровно то что я искал! жаль что только один хук был описан, жду еще подобных видео, лайк, подписка
@VolodymyrSirenko
@VolodymyrSirenko Год назад
Очень полезное видео, спасибо! Я, как начинающий , не все смог переварить,. но от половины видео есть реальная польза! :)
@murrmax1466
@murrmax1466 9 месяцев назад
спасибо большое! Вот тебе комментарий, хотелось бы больше таких видео по реакту!
@alexanderkomanov4151
@alexanderkomanov4151 Год назад
Классно! Хотелось бы про useEffect как продолжение ну и про остальные тоже. 😀
@kentavr16
@kentavr16 Год назад
Хорошее обобщающее видео. Думаю будет интересно увидеть нечто подобное о пропсах.
@user-rk1nn9xi7o
@user-rk1nn9xi7o 6 месяцев назад
действительно полезное видео. спасибо
@MaximSeleznev
@MaximSeleznev 5 месяцев назад
Очень круто! Спасибо!
@Soap9613
@Soap9613 Год назад
Очень интересно даже того, кто не знает реакт, но знает js! Давай ещё!))
@saperovtop
@saperovtop 11 месяцев назад
Огонь! 🔥
@roshin-1
@roshin-1 Год назад
Спасибо большое! Теперь я понял как это работает)
@unknown.6914
@unknown.6914 6 месяцев назад
Как для начинающего разработчика, очень полезное видео, Спасибо !
@user-eg2nn4ww7r
@user-eg2nn4ww7r Год назад
Максимально понятно и доходчиво
@Zubairavvv
@Zubairavvv Год назад
Пишу лайк, ставлю комментарий и показываю что мне интересно )
@hello-gq4yi
@hello-gq4yi Год назад
Лайк поставлен , комментарий соответственно 🌚🫡
@user-le6ly6ri6t
@user-le6ly6ri6t Год назад
Огромная благодарность за такое видео про особенности useState! Будем ждать про другие хуки в том же формате!
@user-wt8sq9om6c
@user-wt8sq9om6c Год назад
Супер спасибо!!! Если так разберать все топовые хуки, то будет агонь, агнинский!!!
@user-dp1ke7bx7c
@user-dp1ke7bx7c Год назад
Супер контент !!
@user-qd5rj5iz3h
@user-qd5rj5iz3h Год назад
Отличное видео
@samiroutka
@samiroutka 11 месяцев назад
Благодарю, неплохо помог
@user-nb7cv5px1v
@user-nb7cv5px1v Год назад
Очень очень классный ролик. Да и вообще канал крутой. Спасибо за Реакт-пиццу
@erzhan225
@erzhan225 Год назад
Да, давай ещё эту рубрику
@deceser8057
@deceser8057 Год назад
Збс, продолжай!
@abikideas
@abikideas Год назад
Ухты, спасибо большое. Столько времени сидел и не понимал, почему меняю state объекта, а ничего не рендерится. Как больно быть новичком в чем-то )
@Grigoren_com
@Grigoren_com Год назад
спасибо! хорошо всё.
@stellarlay517
@stellarlay517 4 месяца назад
Начиная с 10-й минуты, по поводу undefined в users: как-то немного замудренно объяснял) Просто должно быть понимание, что useEffect отрабатывает только ПОСЛЕ рендера компонента. Поэтому и undefined, потому что при рендере useEffect ещё не отработал, а начнет свое выполнение только после отрисовки разметки и уже тогда из-за setUsers произойдет ре-рендер и мы увидим наших пользователей. То есть людям нужно донести именно базовое понимание того, почему мы undefined сначала получаем, иначе никто так и не поймет ничего А так за видос респект, прошел по основным "грубым" ошибкам!:)
@2Extremum
@2Extremum 3 месяца назад
Для понимания надо сначала на этом же канале посмотреть очень понятное видео о useEffect
@Oleg_Artemov
@Oleg_Artemov Год назад
очень интересно! расскажи пожалуйста про использование хука useLayoutEffect
@ihor7307
@ihor7307 Год назад
Круто. Давай про другие хуки. С более конкретными примерами использование
@T800Cyberdine
@T800Cyberdine Год назад
Очень полезный видос! Жалко что не посмотрел его пару недель назад, сэкономил бы кучу своего времени. (к решению пришел сам, перепробовав кучу вариантов и вникнув в суть самой проблемы мутации массивов. Но времени затратил на это немеряно.)
@ArchakovBlog
@ArchakovBlog Год назад
молодец, что сам нашёл 👍 в идеале, нужно стараться сначала самому находить решения любым возможным способом и только потом искать его в подобных роликах и других готовых решениях
@AmericanDragon134
@AmericanDragon134 Год назад
@@ArchakovBlog а какая у тебя клавиатура?
@dmitrylem7703
@dmitrylem7703 Год назад
Хочу больше роликов про best practices
@alekseyberezov8020
@alekseyberezov8020 Год назад
Бро, продолжай пожалуйста!!!
@tastebublik
@tastebublik Год назад
Очень ждем новые видео
@user-ic4dk4sp3y
@user-ic4dk4sp3y Год назад
Топи топи интересно же и залипательно
@Daemond15
@Daemond15 Год назад
Спасибо за крутотень
@unknownWakeborder
@unknownWakeborder Год назад
Будет полезной инфа про основные хуки и их работу под капотом, а так же их стоимость выполнения, это поможет лучше понимать когда стоит их применять.
@maronwilsons
@maronwilsons Год назад
Денис ждем новый интенсив по Next.js + TypeScript, оч хотим((
@kspshnik
@kspshnik 11 месяцев назад
Доброе утро! Про useLayoutEffect() было бы суперкруто :)
@user-mv8bu5jy2n
@user-mv8bu5jy2n Год назад
Ролик и интересный и полезный! Сделай пожалуйста по остальным хукам!
@vladimirv787
@vladimirv787 Год назад
Спасибо!
@user-gp5cq8pp1o
@user-gp5cq8pp1o Год назад
Топ тема, делай больше таких видео, я как раз изучаю реакт, и был вопрос как лучше все это использовать нельзя же все хуки использовать на абум
@user-du5zb3zl2b
@user-du5zb3zl2b Год назад
Привет) спасибо за видео! а когда будет про (не используй везде useCallback и memo) ?
@SeverHolod
@SeverHolod Год назад
Будут ли еще видео по React Native? Жду с нетерпением
@user-dp1ke7bx7c
@user-dp1ke7bx7c Год назад
Теперь понятно что такое мутация объекта.
@raff_m_d6971
@raff_m_d6971 Год назад
Формат отличный
@javascriptov
@javascriptov Год назад
Гоу видос про useCallback | useMemo
@LavandaKicK
@LavandaKicK 7 месяцев назад
Благодарю за видео и вообще контент, очень полезный! Лично мне было бы интересно посмотреть как писать CSR приложение на React, с db на postgres, sequelize-cli, сервер на express, webpack, регистрация-авторизация на JWT(c access token и refresh token), bcrypt, модалки, мультеры(загрузка-выгрузка файлов) и конечно как писать endpoints api и render на бек, всё связывать и защищать. Мне думается что задача сложна для начинающего фулстека, поднять сервак, и на хуках параллельно связывать фронт и бэк. Книжный клуб например. А вообще хотел узнать что за тема в VSCODE??? =))))
@yoerh
@yoerh Год назад
Ждём видео об остальных хуках
@jamjam3337
@jamjam3337 Год назад
👏👍
@-slever-68
@-slever-68 Год назад
Будут ли новые полные курсы (на несколько видосов)? Если да, то будут ли для premiddle/middle и как скоро?
@arturmavlidov247
@arturmavlidov247 Год назад
❤‍🔥
@slavikvasin9095
@slavikvasin9095 Год назад
юзколбек и юзмемо ошибки ждем) и хотелось бы больше по тулкиту инфы и парочку мнений на счет актуальности стека через обычный редакс и классы, не приведет ли это к потери актуальности на рынке через пару лет такой работы, при активном развитии тулкита и функциональных комп. есть ли смысл ломать голову в коде на классах в 23-24 годах? так же хотелось бы услышать мнение о TS, очень многие его нахваливают, но я слышал мнение от очень крутых разрабов, что тс нужен только если ты изначально пишешь хреновый код ибо слабые разрабы хейтят не строгую типизацию, а потом скилапнувшись наоборот восхваляют возможности динамической типизации... как то так
@user-yo7bj9yj3g
@user-yo7bj9yj3g Год назад
👍
@haibova_irisha
@haibova_irisha Год назад
привет еще раз ! знаю сейчас не луяшое время , но нету ли в планах сделать какой-то малеьний проект используя react , redux , rtk query , ts ? спасибо
@____Olga__
@____Olga__ Год назад
Расскажи по возможности, пожалуйста про все костыли useCallback() & useEffect()
@user-tn1yc1ij8d
@user-tn1yc1ij8d Год назад
Гоу видосы про useForm и про валидацию
@haibova_irisha
@haibova_irisha Год назад
Привет , ,с Новым годом ! а можно более подробно о мутациях ? Как правильно использовать с redux toolkit , спасибо
@mikalai_root
@mikalai_root Год назад
Спасибо за некоторые интересные моменты. Маленький вопросик: а почему setInterval не убили в ретерне юзэффекта?
@joper3703
@joper3703 Год назад
Да, давай пожалуйста про useMemo и useCallback
@stanislavsapogov9268
@stanislavsapogov9268 7 месяцев назад
Спасибо за видео! Скажи, плиз, почему в случае с работой с массивами опять не воспользоваться функцией и не написать setState(prev => [...prev, newTask])?
@tanercoder1915
@tanercoder1915 Год назад
Важно также возвращать cleanup callback из useEffect когда есть любые подписки и счётчики.
@haibova_irisha
@haibova_irisha Год назад
Спасибо большое !!! очень крутая подача ) а на boosty ты ессть новый контент ?
@ArchakovBlog
@ArchakovBlog Год назад
Сначала новый контент выходит там. Это видео появилось в Ютубе через неделю только, поле бусти
@haibova_irisha
@haibova_irisha Год назад
@@ArchakovBlog спасибо
@lukts7839
@lukts7839 Год назад
Спасибо за видео. Чнм больше хуков, тем лучше.
@nexakasaki
@nexakasaki Год назад
Норм, новичкам самое то
@Albert-pm6uf
@Albert-pm6uf Год назад
Можете подсказать как сделать такое же плавное перемещение курсора?
@NovikovEugene84
@NovikovEugene84 3 месяца назад
Ну это прям база
@azizoid
@azizoid Год назад
А почему в примере с тасками вы не работаете с предыдущими значениями как в первом примере?
@uicodeuz
@uicodeuz Год назад
Кайф
@user-tr8gr6bl2u
@user-tr8gr6bl2u Год назад
В первом случае что нам мешает добавить count в массив зависимости в useEffect?
@goqorhovhannisyan2048
@goqorhovhannisyan2048 Год назад
Привет Арчаков, пожалуйста, сделайте видео о миксе useContext + useReducer в качестве замены Redux-а.
@user-yv9fv6rc2d
@user-yv9fv6rc2d 7 месяцев назад
Дик е хьун👍
@serheyjankowsky6899
@serheyjankowsky6899 Год назад
setState(prev=>), вызывает общий стейт у компонента который ты будешь использовать на одной странице , пример : толерантный с 3 значениями которые ты можешь переключать , создаешь несколько элементов на странице , начинаешь переключать , и воля у тебя во всех компонентах меняется значения , хотя ты в других его не менял , так что нужно быть аккуратным
@kaze9308
@kaze9308 11 месяцев назад
так это корректная работа useState ведь. он хранит одно состояние, несмотря на то, что разные компоненты снизу используют его
@dpoleev
@dpoleev Год назад
Подскажи, есть ли у тебя что ни будь. где рассказываешь как запустить перерисовку наружних компонентов из внутренних?
@mikalai_root
@mikalai_root Год назад
Перерендер родителя из потомка? 1. Callback функцией, переданной как пропс. 2. Изменение переменной глобального стэйта приложения ( пример с условным редаксом: в чайлде используешь диспатч и изменяешь переменную, которая используется в родителе.). Наверняка есть ещё какие-нибудь извращённые способы, типо поиска элементов родителя в dom дереве и прямые манипуляции нативным джаваскриптом( всякие append и т.д.)
@proletarian
@proletarian Год назад
так я опытный оказывается, не знал
@arman-6172
@arman-6172 9 месяцев назад
18:20 Привет. Что думаешь, если всегда использовать в таком виде: setTask((tasks) => [...task, text]) какие плюсы: 1. Ты всегда работаешь с данными, которые хранит хук 2. Если нужно будет юзать Memo или в useState хранится объект, который нужно менять от других эффектов, то не нужно будет условный tasks прописывать в зависимости эффектов 🤔
@algum4678
@algum4678 Год назад
Про usememo с использованием react devtools (как проверять лишние отрисовки) пожалуйста расскажи
@ryskin82
@ryskin82 Год назад
Хочешь удалить из списка элемент делай просто filter c нужными условиями
Далее
#3: React Hooks - useRef
27:52
Просмотров 64 тыс.
КОГДА БАТЕ ДАЛИ ОТПУСК😂#shorts
00:59
#1: React Hooks - useState
27:47
Просмотров 62 тыс.