Не делайте так в React!

แชร์
ฝัง
  • เผยแพร่เมื่อ 10 ม.ค. 2025

ความคิดเห็น • 116

  • @PurpleSchool
    @PurpleSchool  ปีที่แล้ว +2

    🔗 Ссылки:
    🎉 Курсы по React, React Router и Redux: purpleschool.ru/course/react-redux
    🎓 Мои курсы по разработке: purpleschool.ru
    💬 Telegram канал с полезными советами:
    t.me/purple_code_channel

  • @WinchesterD
    @WinchesterD 3 หลายเดือนก่อน

    Спасибо, про расширение интерфейса и затем деструктуризацию пропса в инпут вообще пушка.

    • @PurpleSchool
      @PurpleSchool  3 หลายเดือนก่อน

      @@WinchesterD спасибо

  • @АлександрКасатов
    @АлександрКасатов ปีที่แล้ว +8

    Видео в целом полезное) Но по поводу последнего пункта я бы добавил еще, что если isAuthed вычисляется не в самом компоненте, а приходит в пропсах (как в вашем примере), то проще и нагляднее сделать условный рендеринг этого компонента в родителе, и пропс isAuthed нам не понадобится вовсе.

  • @alexeybakushev1932
    @alexeybakushev1932 ปีที่แล้ว +2

    Вот хороший материал! Понятный и полезный не только самым начинающим. До сих пор встречаются люди, что пренебрегают правильной типизацией при написании React-компонентов. Побольше бы таких видео в интернетах. Рекомендую.

  • @WorldCount
    @WorldCount ปีที่แล้ว +1

    Ой как этой информации не хватало, когда только начинал. Спасибо за труд.

  • @LRXAORLOV
    @LRXAORLOV ปีที่แล้ว +3

    Чтобы не писать такой дженерик с HtmlAttrs и тд можно использовать другой) ComponentProps )

  • @snatvb
    @snatvb ปีที่แล้ว +4

    1 - про пропсы просто крик души, согласен с тобой полностью, ток лучше type вместе interface юзать, ибо мы на большом проекте похавали за счет merging declaration :)
    2 - про форвард реф еще один плюс в карму
    про мутации по моему это база, в каждом утюге это есть)
    для новичков оч полезное видео, а первые два пункта и мидлам как мантру надо показывать

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว +2

      Спасибо) да, type не имеют данного недостатка, но я как заядлый ООПшник любою интерфейсы)

    • @mvttofficial
      @mvttofficial ปีที่แล้ว +1

      ​@@PurpleSchoolмне кажется заядлый оопшник не будет интерфейсы смешивать с функциональным подходом. Перфекционист негодует.😂

    • @mikokz2329
      @mikokz2329 ปีที่แล้ว

      ​@@mvttofficial заядлый ООПшник в вебе это бэкендер на спринге)

  • @xxcrypt234
    @xxcrypt234 ปีที่แล้ว +1

    брал у тебя немного курсов по докеру и ноде, вроде норм

  • @АндрейАнищенко-п7и
    @АндрейАнищенко-п7и ปีที่แล้ว +1

    Всё знал, но голос приятный)

  • @TheLazarev88
    @TheLazarev88 ปีที่แล้ว

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

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Хранить состояние не в ячейке. Возможно использовать глобальный state

    • @TheLazarev88
      @TheLazarev88 ปีที่แล้ว

      @@PurpleSchool да можно в redux, но появляется сложность нужно ид ячейки хранить ведь их много может быть а потом сравнивать. А если еще popper позиционировать. Для новичков не особо тривиальная задача.

  • @TheMrDrell
    @TheMrDrell ปีที่แล้ว +1

    Антон спасибо за видео. Первый же момент с типизацией помог исправить ошибку в компоненте инпута моего пет проекта. Я как раз сделал свой интерфейс, а оно вон как можно было.
    И еще вопрос. Может кто подскажет. Как можно лучше использовать Zustand и React-Query. Я новичок. Делаю свой пет-проект учебный. Решил попрактиковать данные технологии. Увидел или услышал уже не помню где, что вроде они хорошо в связке работают. Вот сижу думаю с точки зрения правильности архитектуры или порядка как лучше их вместе использовать. React-Query тут понятно для асинхронных запросов. Вот запросил я к примеру массив тудушки - а дальше их как то в созданный массив store zustanda на хранение отправлять? Так то мы же можем вызвать useQuery в любом месте в приложении. Есть ли какие то рекомендации на этот счет по их совместному использованию? Допустим асинхронные запросы через React-Query, а что тогда на zustand остается?

    • @ruslan_mart
      @ruslan_mart ปีที่แล้ว

      А есть ли смысл использовать два этих инструмента вместе?
      React-Query вполне должно хватить для запросов и кеширования данных. Если какие-то общие данные нужно хранить, например, текущую тему, то вполне хватит react context.
      Еще можно посмотреть в сторону redux-toolkit, там есть rtk-query (аналог react-query), только в совокупности можно будет использовать и как общий стор, и как инструмент для кеширования запросов.

  • @DonExCode
    @DonExCode ปีที่แล้ว +1

    Хорошая подборка. Когда только начинал работать с реактом, условные выражения ставил выше хуков и в какой-то момент начали происходить проблемы с отображением компонентов.
    Антон, подскажите пожалуйста. Какой фреймворк для React лучше подойдет, для реализации PWA, с учетом того, что клиент имеет нестабильное сетевое подключение?
    Видя, что Next движется в SSR, возник вопрос, будет ли дальнейшая поддержка Page Router. В специфичных задачах, как у меня, не всегда подходит SSR. Иногда необходимо, чтобы приложение локально хранило информацию и потом выполнялась синхронизация.

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว +1

      Для Next сейчас лучше использовать AppRouter. А для PWA, если не нужен SSR, то можно использовать не обязательно Next

    • @aboba86468
      @aboba86468 ปีที่แล้ว

      Page router в 13.4 уже всё кажись(

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Нет, он будет и дальше поддерживаться.

  • @mr_adw
    @mr_adw ปีที่แล้ว

    Спасибо, хорошая инфа.

  • @engelknight2059
    @engelknight2059 ปีที่แล้ว +1

    спасибо очень полезно

  • @truedivan
    @truedivan ปีที่แล้ว

    как всегда чётко, спасибо!

  • @romanryaboshtan9270
    @romanryaboshtan9270 ปีที่แล้ว

    5:18 это будет работать и без ForwardRef. Не es6 синтаксис(ключевое слово function)

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Не очень понял. Что будет работать?

    • @romanryaboshtan9270
      @romanryaboshtan9270 ปีที่แล้ว

      @@PurpleSchool ладно, долго объяснять, хочу спросить, есть ли у тебя курсы повышения квалификации для разрабов уровня middle или же программа менторства, к примеру, если можешь менторить, какой rate за час, к примеру, если удалённо менторить команду разрабов уровня strong junior/middle??

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Напишите мне в Telegram @AlariCode, обсудим

  • @STELLS541
    @STELLS541 ปีที่แล้ว +1

    Я уже не оч новичок, но все равно посмотреть было полезно. 🙏🏻💪🏻

  • @dripfeeder666
    @dripfeeder666 ปีที่แล้ว +1

    спасибо

  • @АлексейСоколов-у3к
    @АлексейСоколов-у3к ปีที่แล้ว +1

    Антон спасибо за ролик! А как быть, если например форма на 200 полей ввода?
    Делать один стейт на все(объект) или на каждый инпут стейт или через рефы?

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว +1

      Использовать либу для работы с формами. Самое эффективное

    • @АлексейСоколов-у3к
      @АлексейСоколов-у3к ปีที่แล้ว

      React-hook-form подойдёт? Получается Стейт не нужен? Всё будет хранится а стейте либы?

    • @unknown-im8kj
      @unknown-im8kj ปีที่แล้ว

      да@@АлексейСоколов-у3к

    • @DmitriyDev
      @DmitriyDev ปีที่แล้ว

      ​@@АлексейСоколов-у3кда

  • @STELLS541
    @STELLS541 ปีที่แล้ว +1

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

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว +1

      да, если расширяете базовый элемент HTML, всегда делаем extends

    • @STELLS541
      @STELLS541 ปีที่แล้ว

      @@PurpleSchool, понял и спасибо))))

    • @SYVlive
      @SYVlive ปีที่แล้ว +1

      нет, не всегда) порой важно ограничить использование тех или иных свойств элемента. Например, когда вы делаете дизайн-систему на проекте, давать возможность прокинуть все что душе угодно - зло. Смысла тогда в дизайн-системе проекта - нет.

  • @ivanminyaev3383
    @ivanminyaev3383 ปีที่แล้ว

    Антон, подскажите пожалуйста: во многих ваших видео, можно заметить что, при работе в IDE VSCode, в тот момент, когда вы печатаете (например вызов метода), у вас появляются всплывающие окна, которые подсказывают: какие параметры принимает этот метод и какого типа данные. Как мне сделать так-же ?

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Это все работают и коробки

    • @ИмяФамилия-э4ф7в
      @ИмяФамилия-э4ф7в ปีที่แล้ว

      Юзать тайпскрипт. Это работает из коробки, но если ты пишешь на JS, то IDE часто просто не знает, с чем ты работаешь. Допустим, ты объявляешь функцию
      foo(str) {...}
      Откуда IDE знать, что аргумент - строка? Для неё это просто любой тип данных. Соответственно, в подсказках методов не будет. Но если написать вот так
      foo(str = "") {...}
      то теперь IDE поймет, что это строка и предложит все методы строк в подсказках. Когда ты используешь тайпскрипт, то это вообще применяется для всех аргументов, где указаны типы. В js же только для тех мест, где можно понять, какие типы данных используются: нативные и библиотечные методы.

  • @kimanowka
    @kimanowka ปีที่แล้ว +1

    А можно практики поинтереснее для более опытных?) а то такое чувство, что все одни и те же практики записывают) solid для реакта на практике с реальными компонентами было бы круто посмотреть)

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว +2

      Хорошо. Сделаю думаю видео про FSD

    • @chirkov
      @chirkov ปีที่แล้ว

      @@PurpleSchool интересно было бы увидеть FSD вместе с Next. Да, это ролик на час или два, но было бы очень интересно

    • @AleksandrNeo
      @AleksandrNeo ปีที่แล้ว

      У Михаила Непомнящего есть хорошие видео с примерами на эту тему

  • @brechkoio
    @brechkoio ปีที่แล้ว

    Когда ждать курс на Udemy?

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Думаю что не ждать. Все курсы можно купить на моей платформе.

  • @plan-4D
    @plan-4D ปีที่แล้ว

    Так как правильно - инпут или инпут?

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      инпут)

    • @ИмяФамилия-э4ф7в
      @ИмяФамилия-э4ф7в ปีที่แล้ว

      Однозначно инпут.
      Если хочешь указать ударение, то это делается так: и́нпут или инпу́т

    • @plan-4D
      @plan-4D ปีที่แล้ว

      @@ИмяФамилия-э4ф7в открой окно.

  • @cdeblog
    @cdeblog ปีที่แล้ว

    Как-то не хорошо постоянно пересоздавать объект для состояния. Нет более красивого варианта пнуть ререндер?

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Можно использовать сторонние библиотеки типы immer

    • @cdeblog
      @cdeblog ปีที่แล้ว

      ​@@PurpleSchool, забавно, кажется будто должен быть какой-то нативный способ😊

    • @НиколайВладимирович-к5ф
      @НиколайВладимирович-к5ф ปีที่แล้ว

      @@cdeblogsetState ((state) => {
      return {
      count: state.count + 1
      }
      }) ;

  • @DubinArtur
    @DubinArtur 4 หลายเดือนก่อน +1

    Очень не люблю forwardRef, он очень контринтуитивный, как будто чужеродный и совсем не из реакта

  • @stanislav_ovv
    @stanislav_ovv ปีที่แล้ว

    Музыка практически как у Пивоварова в новостной повестке.

  • @unknown-im8kj
    @unknown-im8kj ปีที่แล้ว +1

    11:13
    сначала показал что неправильно работать с состоянием, которе вернул хук и надо пользоваться коллбэком из функции-сеттера, а теперь сам же ссылаешься на замкнутое состояние внутри функции.

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Да, тут правильнее было был сделать аналогично предыдущем состоянием, но в попыхах записи хотел показать именно работу с объектами

    • @unknown-im8kj
      @unknown-im8kj ปีที่แล้ว +1

      было бы полезно как раз показать как работать с коллбэком и объектом состояния, так как у новичков запись рода setState( prevState => ( { ...prevState, count: prevState.count + 1 } ) ) вызывает страх и много вопросов@@PurpleSchool

  • @xeleos
    @xeleos ปีที่แล้ว

    Не мог понять почему у тебя ошибка на true и null, а это просто тема оказывается

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Да, такая подсветка)

  • @kokoc58
    @kokoc58 ปีที่แล้ว

    useState не понимает что объект изменился - это явно баг, который все воспринимают как фичу))))
    вон в mobx меняешь любое поле объекта и react всё понимает, даже если поле вложенного объекта

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Это не баг, а работа JS. Mobx это делает за счёт дополнительных механизмов под капотом.

    • @ruslan_mart
      @ruslan_mart ปีที่แล้ว

      mobx "прослушивает" объект через Proxy (раньше через декораторы/обёртки над дескрипторами). В реакте такого нет, потому что это сильно будет тормозить работу JS. Да и в целом, можно было бы тогда словить много сайдэффектов, когда объекты прокидываются в другие компоненты и там могут мутироваться. В общем, в реакте как раз сделано все вполне логично.

    • @ИмяФамилия-э4ф7в
      @ИмяФамилия-э4ф7в ปีที่แล้ว

      Это не баг, а концептуальное решение. Можно было сделать так или так, на этапе разработки самого реакт было принято решение использовать иммутабельный подход. И за и против есть свои аргументы, для команды реакта тогда аргументы за перевесили. Ты же не думаешь, всерьез, что команда реакта просто не смогла сделать мутируемый стейт? 😂

  • @andrei-psyhelp
    @andrei-psyhelp ปีที่แล้ว

    Зачем использовать forwarRef, если можно просто прокинуть ref пропсом?

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว +1

      Можно, но оно может трирегить дополнительный rerender. Подробнее тут: stackoverflow.com/questions/58578570/value-of-using-react-forwardref-vs-custom-ref-prop

    • @TheLevius
      @TheLevius ปีที่แล้ว

      так пропсы только для чтения

    • @al77ex1
      @al77ex1 ปีที่แล้ว

      в доках пишут так не делать т.к. ref предопределенная переменная реакта именно поэтому нужен метод forwardRef().

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Можно прокинуть другим кастомным props, но это тоже не очень

  • @int3rhard
    @int3rhard ปีที่แล้ว +4

    Какой же все-таки реакт убогий в плане шаблонов, во вью они намного более читабельнее получаются.

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว +1

      Всё зависит от привычки)

    • @jmksm
      @jmksm ปีที่แล้ว

      А ангуляр ещё лучше)

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Смотря для чего)

    • @jmksm
      @jmksm ปีที่แล้ว

      @@PurpleSchool для коммерческой разработки) А петы можно и на ванильном js писать)

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Я 4 года писал на Angular и скажу что для CRM и прочих вещей да, а вот для SSR сайтов и прочего - не самое оптимальное решение

  • @spray-laughter
    @spray-laughter ปีที่แล้ว +2

    Поработав с реактом два года, я определённо могу сделать вывод, что начинать работать с ним уже и было самой ошибкой ;)

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว +1

      Очень критично) Я 4 года работал с Angular, год со Svelte, но React люблю)

    • @Icanfly-
      @Icanfly- ปีที่แล้ว +1

      За 2 года не осилить реакт это мощно

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      На проде Vue не использовал

    • @radikovichkz2470
      @radikovichkz2470 ปีที่แล้ว

      Разве есть какие то аналоги? В чем именно для вас было сложно?

  • @nan1000
    @nan1000 ปีที่แล้ว +1

    Не надо делать такие заголовки. Бесят же

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Зато CTR хороший)

  • @dmitriy4415
    @dmitriy4415 ปีที่แล้ว +3

    Реакт ужасен своей кашей. Плюс ирония в том, что реакт не реактивен.

    • @radikovichkz2470
      @radikovichkz2470 ปีที่แล้ว

      А что тогда рекомендуете взамен? Vue думаете лучше ? Может дело не в самом реакт?

    • @АртёмСенькевич-ы5с
      @АртёмСенькевич-ы5с ปีที่แล้ว +2

      ​@@radikovichkz2470он наверное, как большинство людей жалуются, а сами технологию освоили на минимальный уровень и ничего нормального сделать не могут

    • @arturseu
      @arturseu ปีที่แล้ว +1

      Каша у тебя в голове. Реакт всего лишь библиотека. Все остальное пожалуйста сам.

    • @АртёмСенькевич-ы5с
      @АртёмСенькевич-ы5с ปีที่แล้ว +1

      @@arturseu ну он просто не понимает, что такое React

    • @dmitriy4415
      @dmitriy4415 ปีที่แล้ว

      @@arturseu у тебя каша в голове

  • @remiku-play
    @remiku-play ปีที่แล้ว +1

    Какой мерзкий реакт после Свелта, смотрю и тошнит

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Кому что нравится)

    • @dmitriy4415
      @dmitriy4415 ปีที่แล้ว

      Он ужасен и после Vue, и после angular

    • @radikovichkz2470
      @radikovichkz2470 ปีที่แล้ว

      @@PurpleSchoolне обращайте внимание на html программистов

    • @ИмяФамилия-э4ф7в
      @ИмяФамилия-э4ф7в ปีที่แล้ว

      Не вижу проблемы, пиши на свелте 🤷🏿‍♂️

  • @w1png_alt
    @w1png_alt ปีที่แล้ว

    Уважаемый Антон, я очень разочарован вашим поведением. Почему используете это противное детище Microsoft вместо православного neovim
    Видео бомбовое кстати

    • @PurpleSchool
      @PurpleSchool  ปีที่แล้ว

      Уважаемый @w1png_alt, VSCode вполне достоин того, чтобы его демонстрировать в целях обучения.
      Neovim на месте)