Лимитирование пропсов в React компонентах

แชร์
ฝัง
  • เผยแพร่เมื่อ 6 ก.ย. 2024
  • Как запретить передачу тех или иных пропсов при выборе конкретных значений. Например, запретить передачу иконки для кнопки при выборе определенного варианта отображения. Разбираемся, как TypeScript может нам в этом помочь.
    Код из видео codesandbox.io...
    Мои курсы по вебу с купонами:
    ✅ mishanep.com/
    📢 Поддержка канала:
    / mishanep
    www.tinkoff.ru...
    paypal.me/mish...

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

  • @victormog
    @victormog ปีที่แล้ว +12

    Отличные примеры по прикладному использованию TypeScript!
    Обязательно продолжай!

  • @mikebotkin9094
    @mikebotkin9094 11 หลายเดือนก่อน +2

    весь вечер это ролик искал, помню, что у Вас где-то что-то такое было... очень крутой ход!

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

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

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

    Thank you for your complete and comprehensive training. Very good!

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

    Класс! Спасибо! Как раз то, что нужно мне для выполнения задачи!
    Typescript, условия типов, type, react, ограничения типов

  • @xD-hu3gw
    @xD-hu3gw ปีที่แล้ว

    ну вот и на практике пригодился этот подход - с карточкой

  • @user-vm2db5cq1g
    @user-vm2db5cq1g ปีที่แล้ว

    Отличное видео, спасибо! Такого контента не видел у других, везде в основном база

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

    Спасибо за твой труд

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

    Вот такой контент класс: короткими и полезными видосами! #react #ts #typescrypt #guide #code #js #javascript

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

    Рад был бы видеть больше советов по прикладному использованию typescript, спасибо!

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

    Спасибо! Очень полезный кейс, хотел бы видеть больше подобных видео

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

    Отличный практический пример, спасибо Михаил.

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

    Ты мне очень помог сейчас решить задачу в нашем проекте где требовался такой use-case!
    Спасибо:)

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

    Полезность ваших туториалов на весьма высоком уровне!

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

    Благодарю за видео. Всё, как всегда, ясно и понятно)

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

    Супер, огромное спасибо, очень полезный урок

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

    по хорошему все же делать 4 варианта. но это как-то все громоздко получается. если надо не 2 или 4 пропса, а 10, то 10 вариантов делать, а если еще и вариантов несколько комбинаций, то пол кода будут только эти определяющие типы. все же как-то универсальнее и более расширяемо бы.

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

    Формат видео топ и объяснил понятно

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

    Большое Спасибо за видео ❤

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

    Михаил, спасибо!

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

    Top

  • @uvy.studios
    @uvy.studios ปีที่แล้ว +2

    А вот жаль вы не показали вариант с отдельными типами для стрелки и иконки. Не до конца понимаю, как их нужно было бы комбинировать с типами primary и secondary.

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

      По идее так
      type Props = PrimaryProps | SecondaryProps & ArrowProps | IconProps

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

    Спасибо большое!!!

  • @FerelUltra
    @FerelUltra 2 หลายเดือนก่อน

    класс

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

    Спасибо за видео - может быть полезно знать о таком описании пропов. Хотя в данном случае это выглядит как попытка бороться с изначально плохим дизайном пропов. Был бы общий проп для primary и secondary (variant, например) и ещё один для icon и arrow (стрелка это ведь тоже иконка), то никакой необходимости в таком сложном описании бы не было.
    А что делать если arrow и icon все так же останутся взаимоисключающими, но смогут применяться и для primary, и для secondary? А что делать если мы добавим ещё несколько подобных пропов? Количество типов же начнёт расти в геометрической прогрессии.

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

    спасибо, я все никак найти не мог, как типизировать компонент инпута по сценариям, ибо общий компонент работает как 5 разных

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

    Супер , спасибо Михаил! Хотел спросить вас , в будущем планируйте записать курс по Recoil JS ?

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

      Я пока с ним не работал. Поэтому в планах нет. Но кто знает)

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

    а как бы выглядела типизация компонента Button если бы мы заменили свойства primary и secondary на variant: 'primary' | 'secondary' и, например через конструкцию switch case для 'primary' возвращали бы компонент PrimaryButton который ожидает пропсы типа PrimaryButtonProps, а для 'secodary' компонент SecondaryButton который ожидает пропсы типа SecondaryButtonProps?

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

      Проп variant попал бы в CommonButtonProps, а из PrimaryButtonProps и SecondaryButtonProps можно было бы удалить primary и secondary.

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

    Михаил, в реакт роутере произошли изменения в новой версии. Вы сможете в ближайших выпусках осветить их? Заранее благодарю

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

      Они там намудрили)) раньше был просто роутинг, а теперь они ещё и получением данных решили заняться. Пока не решил буду ли это про это рассказывать.

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

    Михаил, а нельзя для них задать Conditional Type?

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

      Как вы это видите?

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

    щас бы пропсы типами задавать, а не интерфейсами, а называть все равно интерфейсами. Вариант с вариантом более лаконичен.

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

      Щас бы в ютубе строчить комменты, а не разрабатывать ютуб

  • @vitya.obolonsky
    @vitya.obolonsky 7 หลายเดือนก่อน

    Тут просто треба Union Type

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

    А можно видео по декомпозиции этой кнопки по БЭМ?

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

      А зачем это в реакте? По бэм просто модификаторы добавляются и к ним стили

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

      @@NIReeMK есть великолепный модуль @bem-react, внутри которого есть пакет core, который позволяет в соответствии с пропсами изменять поведение рендера элемента, вместо вереницы условий, логических операторов и switch’ей. Модификаторы и стили - это хорошо, но бэм гораздо глубже.

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

      @@munzamt насколько это вообще актуально в современной разработке? Там чёт 700 скачиваний в неделю всего и пакет год не обновлялся..

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

      @@NIReeMK к сожалению, да, обновлений давно не было
      Но это не умаляет того, насколько это потенциально может быть удобно

  • @user-ul4jn2cj3r
    @user-ul4jn2cj3r ปีที่แล้ว

    Utility Types не помогут сделать тоже самое?

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

      Как именно?

    • @user-ul4jn2cj3r
      @user-ul4jn2cj3r ปีที่แล้ว

      @@mishanep Например, пишем общий интерфейс, затем Pick нужные свойства

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

      Не получится. Там будет та же история, как если бы мы отказались от явного указания свойств с типом never. Т.е. вы отберете свойства, а при деструктуризации TypeScript будет ругаться, что в заявленном типе отсутствуют те или иные свойства (те самые, что присутствуют в одном типе юниона, но отсутствуют в другом).
      codesandbox.io/s/great-bardeen-l3cu1x?file=/src/Button.tsx

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

    +

  • @dr.lunyak2386
    @dr.lunyak2386 ปีที่แล้ว

    просто огонь! может у вас есть что-то для мидл разработчиков или есть возможность менторства?