Пиши КОМПОНЕНТИ як SENIOR | React Compound Component Pattern

Поделиться
HTML-код
  • Опубликовано: 16 май 2024
  • #frontend #development #react
    Привіт, я Нік і ти на каналі Dev Routine!
    Посилання на проект з відео: github.com/SemX74/compound-co...
    Стеж за нами в телеграмі: (Корисні пости і меми): t.me/+giZ-rijhq7BiZGEy
    Дивись наш тікток: / dev.routine
    Лайк та коментар, якщо відео було тобі корисно!
    Таймкоди:
    0:00 - Інтро
    0:20 - Вступ
    1:07 - Пояснення проблеми
    2:02 - Рефакторимо компонент
    9:00 - Заключення
  • НаукаНаука

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

  • @vladprodan7010
    @vladprodan7010 19 дней назад +5

    Дуже круто, продовжуй!

  • @user-xd3we2qp4i
    @user-xd3we2qp4i 13 дней назад +1

    Дякую за tutorial, лишень не встигав зрозуміти, треба ще раз подивитись для усвідомлення.

    • @vladyslavbrataniuk1324
      @vladyslavbrataniuk1324 12 дней назад +1

      правда, зазвичай приходиться дивитись подібні відео на 1.25-1.5, а тут навпаки - 0.75)))

  • @BazliMax
    @BazliMax 12 дней назад

    Дякую за цікавий контент

  • @RR-rw5bc
    @RR-rw5bc 17 дней назад +2

    Відверто - норм-лайк!)
    Така невеличка стаття на пару хв, що продемонстрована автором у відео дуже якісно!)
    Для себе знайшов ComponentPropsWithoutRef. Постійно махався з TS і получалось недуже 🥲А хотілось зробити саме так.
    Дякую!)

  • @user-lb6lq5yh5q
    @user-lb6lq5yh5q 18 дней назад +4

    Слушай, а пиздатый подход 😮

  • @VasFree
    @VasFree 19 дней назад +9

    Вже злякався, що сотий раз доведеться передивлятись "php за 5 хвилин" за сніданком, але мій сніданок був врятований Ніком. За відос подякував! І, що не менш важливо, поснідав!

  • @ggo_webdev
    @ggo_webdev 12 дней назад

    Дуже гарно розповідаєте, маєте до цього неабиякий хист, мені дуже подобається, лайк, підписка і респект) продовжуйте ділитися чимось цікавим)

  • @renkodima
    @renkodima 17 дней назад +5

    Дякую за годний український контент!

  • @inkliuznyk
    @inkliuznyk 13 дней назад

    Ого, оце якість і багато нового дізнався і подача хороша. Підписка, лайк.

  • @ops_rv
    @ops_rv 15 дней назад

    Дякую за контент, використовуємо такий стиль написання компонентів в Ui бібліотеці, зручно.

  • @rosaka14
    @rosaka14 19 дней назад +4

    харош

  • @CryptoBro7
    @CryptoBro7 18 дней назад +4

    Нік із каналу Dev Routine мій улюблений it блогер!

  • @hasst9261
    @hasst9261 16 дней назад

    Дякую, що є посилання на репо

  • @spacepirate3279
    @spacepirate3279 17 дней назад +9

    Раз на рік і рекомендації ютюб нормальний контент підкидають! Просто супер жирний плюс за якісний український контент! Лайк і підписка!

  • @CodeBeep
    @CodeBeep 18 дней назад +2

    Лайк, підписка)

  • @YuriiKratser
    @YuriiKratser 13 дней назад

    Молодець!

  • @user-tn3uo6tr3t
    @user-tn3uo6tr3t 13 дней назад

    От чортяка, а це вражає
    Однозначно лайк

  • @user-yk6iq5hn4d
    @user-yk6iq5hn4d 17 дней назад +2

    Відео трапилось у рекомендаціях, побачив про ІТ українською, дивлюсь із задоволенням. Канал невеличкий, але думаю, що своя аудиторія прийде. Автору сил і вдачі!

  • @snieda_programming
    @snieda_programming 15 дней назад

    топ контент

  • @devjourney8583
    @devjourney8583 17 дней назад

    дякую за корисне відео!

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад

      Дякую за коментар! Слідкуй за новими відео🤠

  • @pahan35skype
    @pahan35skype 14 дней назад

    Класний контент, чуваче! Продовжуй знімати корисні штучки.

  • @nemec980
    @nemec980 15 дней назад

    Не багато українського контенту в сфері фронтенду
    Дякую за твою працю!
    Лайк авансом :)

    • @nemec980
      @nemec980 15 дней назад

      А яка в тебе тема у vs-code?)

    • @itsDevRoutine
      @itsDevRoutine  15 дней назад

      @@nemec980 Дякую за підтримку!
      Це CodeSandbox Black у виконанні Ziady Mubaraq. Використовую вже років так 2)

  • @AndrewFloatrx
    @AndrewFloatrx 17 дней назад +5

    багато зауважень... подивись як проектують компоненти у топових UI лібах і пробуй робити так само... видно, що трохи шариш, але писати в заголовку клікбейт ал-ля "пиши як сіньйор" то можна і на критику відповідну нарватися )) ну не дотягує тут на сіньйора... це банальний до болі простий приклад... на сіньйора треба брати якусь складнішу тасочку... Popover візуально по UI виглядає не так... це більше смахує на Dropdown... + console.log('hello') замість того, щоб описати нормальну подію і прокинути наверх - це точно по-сіньйорськи )))
    ps; продовжуй у тому ж дусі і колись будеш писати як сіньйор )) 😜

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад +1

      Дякую за коментар!
      Насправді сам розумію що не дотягнув в багатьох моментах + можна було б ускладнити, бо аж надто мало логіки.
      Клікбейтити погано але в кінці кінців можливо через таку назву люди у яких є більший досвід можуть дати якісь поради ну і піддати відео критиці (я це сильно ціную)
      P.S. Роботу над помилками зробимо, буду старатись краще)

    • @Clo2n
      @Clo2n 12 дней назад

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

  • @leroviten
    @leroviten 16 дней назад +4

    Гідний і сучасний контент! Дякую. Прям нагадало примітиви Radix. 🤙

  • @bozhokvictor7740
    @bozhokvictor7740 9 дней назад

    Ти крутий! Дякую за якісний контент українською!

  • @user-yk6iq5hn4d
    @user-yk6iq5hn4d 17 дней назад +1

    Та є декілька порад:
    1) замість ...rest краще писати ...props
    2) замість бібліотеки classnames використовуй clsx, це теж саме, але менше важить, тож краще
    3) не обов'язково обертати компонент в тег div. Можна використовувати і не смітити тегами. Це теж хороший підхід. В даному випадку з тег div взагалі не потрібний

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад +1

      Дякую! Взагалі все знав але дякую за поправки, спішив)
      А на рахунок classNames я вже й сам його не використовую, а роблю поєднання clsx & twmerge, тоді люта імба получається

    • @user-yk6iq5hn4d
      @user-yk6iq5hn4d 17 дней назад

      @@itsDevRoutine Крутяк. Підхід вогонь, я теж так роблю з невеликими змінами. Спробуй колись підхід з папкою src/shared/conponents/SomeComponent де лежать компоненти, які будуть використовуватися як конструктор. Це в цілому теж саме, але без assign'ів, поки не можу сказати як краще. Твій варіант вогонь, але треба пробувати на практиці, коли потрібна буде більша гнучкість

  • @user-lq2us4rc9t
    @user-lq2us4rc9t 18 дней назад +1

    Дякую, лайк підписка. Але було б цікаво подивитись якісь уроки, як більш детально то робити, які проблеми вирішує і тд)

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад

      Вже на етапі монтажу зрозумів це
      Вчимось на помилках, в наступних відео буде більше лірики на рахунок цього)

  • @ruslankovalenko5086
    @ruslankovalenko5086 17 дней назад

    Дуже якісно

  • @yourr_dude
    @yourr_dude 17 дней назад

    О файно

  • @dmons24
    @dmons24 17 дней назад +2

    В місцях з вставками коду як на 1:05 нічого не можна розгледіти. Роби їх трохи довше на єкрані?

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад

      Будемо працювати над цим

  • @xczm225
    @xczm225 17 дней назад +1

    підписався!

  • @webUtopiaUa
    @webUtopiaUa 17 дней назад +2

    Ще в ідеалі зробити 2 контексти для того щоб зайвий раз не відбувався рендер і обєднати їх, один для хендлерів другий для змінних які(ий) хендлер трігерить і відповідно імпортувати різні в потрібні місця. В цілому такий підхід як на відео актуальний для написання кастомної бібліотеки з великою кількістю компонентів та їх варіацій, в іншому MUI або аналогів з базовою кастомізацією достатньо з головою...

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад +1

      Хороша ідея! Подивимось що принесе реакт 19, можливо не потрібно буде паритись за подвійний контекст ітд.
      В кінці кінців це стосується не тільки поповерів ітд а загалом одним із способів структурування компонентів які якимось чином повʼязані між собою😄

  • @_g4rv
    @_g4rv 17 дней назад +1

    Друже, чудове відео!
    Придумай, буль ласка, щось зі звуком, щоб звуки клавіатури так по вухах не били... дякую!

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад

      В процесі покупки мікрофона, вибач що приходиться таке слухати(

  • @aonteb9celuet262
    @aonteb9celuet262 15 дней назад +7

    Для Тейлвінду краще використовувати не classNames або clsx, а tailwind-merge. Він краще працює з об'єднанням классів саме тейлвінда (при опціональних класах ці ліби можуть некоректно заміщати класи). До того ж, tailwind-merge пропонує багато інструментів для работи з конфігом тв.

  • @maxymbrychka
    @maxymbrychka 16 дней назад

    nice

  • @artemkatr9483
    @artemkatr9483 18 дней назад +2

    давай відос про архітектуру проектів на реакт

  • @sanfrancisco8426
    @sanfrancisco8426 18 дней назад +4

    Щей українською, топ! Підписочка)

  • @rhost-9968
    @rhost-9968 17 дней назад +2

    const Popover = Object.assign(PopoverComponent, {
    Button: PopoverButton
    })
    ===
    PopoverComponent.Button = PopoverButton

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад +1

      В деяких сетапах може бути помилка в ts в такому випадку

  • @user-ji8me7hz1s
    @user-ji8me7hz1s 17 дней назад

    Привіт, дякую за таке інформативне відео. Поділися будь ласка, чи плануєш випускати відео по Next.js?

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад +2

      Так, але сам планую краще розібратись в ньому, тільки відносно недавно почав працювати на app роутері

  • @black_light
    @black_light 15 дней назад

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

    • @itsDevRoutine
      @itsDevRoutine  15 дней назад

      з часом все буде вийде!)

  • @romanroki7528
    @romanroki7528 17 дней назад

    Дуже круте відео, продовжуй в тому дусі.А з redux toolkit цей підхід так само працює?

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад

      Дякую!
      Питання трішки не зрозумів, можеш пояснити?

    • @romanroki7528
      @romanroki7528 17 дней назад

      @@itsDevRoutine ну я маю на увазі якщо замінити context на redux toolkit буде так само працювати?

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад +1

      @@romanroki7528 redux це глобальний store, він не підійде для цієї штуки та й немає сенсу його так використовувати

  • @resoursa
    @resoursa 17 дней назад +1

    🥰🥰🥰🥰🥰

  • @amelianceskymusic
    @amelianceskymusic 14 дней назад

    Хтось полайкав, хтось покритикує🤭:
    1. За вставки 25 кадр вже писали
    2. Деколи буває закінчення слів проковтуюиься, доводиться витрачати додаткові зусилля на вслуховування, щоб точно усі слова розібрати. Можливо локальна особливість мови
    3. Клавіатура звучить ближче і тарабанить високими частотами по вухах
    4. Рот від мікрофону дуже далеко, через це мікрофон захоплює кімнату (в т.ч. клаву), що звучить не дуже приємно, до того ж голос втрачає в розбірлмвості і тембрі

    • @itsDevRoutine
      @itsDevRoutine  14 дней назад +1

      Мікрофон новий купили, вставки пофіксимо, дякую за комент!🙌

  • @dennyfedyna9707
    @dennyfedyna9707 6 дней назад

    Будуть ще розгляди патернів?)

  • @AntonYefremov
    @AntonYefremov 13 дней назад

    По ідеї, на заміну classnames вже є легша drop-in альтернатива clsx

    • @itsDevRoutine
      @itsDevRoutine  13 дней назад

      є)
      просто проект досить старий і вже юзав те що є, в новому відео буде нова ліба

  • @denisoleksyuk5346
    @denisoleksyuk5346 15 дней назад

    крутий патерн

  • @OstapBrehin
    @OstapBrehin 12 дней назад

    Класна якість, знімаєте на камеру телефону?

    • @itsDevRoutine
      @itsDevRoutine  12 дней назад +1

      Є фотоапарат)

    • @OstapBrehin
      @OstapBrehin 12 дней назад

      @@itsDevRoutine який?)

    • @itsDevRoutine
      @itsDevRoutine  12 дней назад

      @@OstapBrehin це якийсь старенький Canon EOS 60D, взагалі не для відео але я якось рятую ситуацію 😂

  • @user-pl5we9ub8r
    @user-pl5we9ub8r 15 дней назад

    Не багато українського контенту в сфері фронтенду. дякую)

  • @cyxapik61
    @cyxapik61 14 дней назад

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

  • @boriskleshch8416
    @boriskleshch8416 15 дней назад

    Вроде как React-bootstrap так и делает напримере его компонента аккордиона..

    • @itsDevRoutine
      @itsDevRoutine  15 дней назад +1

      Так роблять багато ліб, наприклад react/headlessui

  • @ukrainianigor
    @ukrainianigor 17 дней назад

    Брат умоляю що за шрифт в ВС КОД хочаЮЗАЮ ВЕБШТОРМ АЛЕ СКАЖИ ШРИФТ АПУПЕНИЙ ПЖ БРО

  • @zakirovdamir
    @zakirovdamir 16 дней назад

    что это за язык? Яндекс.Браузер не справляется с переводом

  • @thecoolestpro1307
    @thecoolestpro1307 16 дней назад

    Чому не юзаєш диструктуризацію?

  • @andrii_suprunenko
    @andrii_suprunenko 17 дней назад

    icon в arc то за одного запрошеного?

  • @thechrom007
    @thechrom007 17 дней назад

    А нащо Object.assign? Чому не просто export default { ... , .... , ... } ?

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад +1

      Можна, але таким чином ми обмежуємось тільки одним імпортом, та групуємо ці компоненти. В нас виходить єдиний неймспейс:
      Popover.Button
      Popover.List

    • @GazdaZuBB
      @GazdaZuBB 15 дней назад

      @@itsDevRoutine А хтось заюзав тільки 2 із 3х твоїх компонент, а із-за 1 штучно створеного неймспейсу в тебе трішейкінг якраз його і не викине

    • @GazdaZuBB
      @GazdaZuBB 15 дней назад

      @@itsDevRoutine економити на імпортах така собі ідея. потім бандлер все як треба змерджить і буде економія.

    • @itsDevRoutine
      @itsDevRoutine  15 дней назад

      @@GazdaZuBB Ну по-перше я не думаю що хтось буде використовувати подібний компонент без кнопки, ліста або або кнопки всередині поповера (або меню), бо один без одного вони не можуть функціонувати. Також такий паттерн юзають в дуже популярних лібах і туди пхають далеко не такі простенькі компоненти, у яких різниця бандлу буде (якщо вже таки щось пішло не так) мізерна.
      І на кінець я просто показав який є варіант робити компоненти :)
      А стосовно імпортів, то все-таки якщо є можливість імпортити один якщо вони всеодно всі використовуються, то чому б нею не скористатись?

  • @user-pd1sx5sf7s
    @user-pd1sx5sf7s 14 дней назад

    + 1 в полк shadcn

  • @alexp3617
    @alexp3617 17 дней назад

    можна вставки коду на 0.001 сек зробити? бо дуже встигаю все роздивитись

    • @itsDevRoutine
      @itsDevRoutine  17 дней назад +1

      можна😁
      А взагалі ті вставки не несли ніякого важливого сенсу, і вже потім зрозумів, що дійсно розгледіти їх дуже важко (якщо відео тільки на паузу не поставити)
      Будемо виправляти😜

    • @alexp3617
      @alexp3617 15 дней назад

      @@itsDevRoutine все ок дякую відео класне ) вставки теж топ даже стопнуть не встиг :)

  • @alexkonoplian
    @alexkonoplian 16 дней назад

    Хм, і нашо я подивився, якщо я не пишу на реакті)

  • @m4es7r0
    @m4es7r0 16 дней назад +1

    о ура про react укр

  • @victormyha882
    @victormyha882 6 дней назад

    Оуу шиит, крутезний відос. Не знав про такий спосіб написання ui, виглядає бомбезно, буду юзати
    Дякую!

  • @vladyslavnahornyi7663
    @vladyslavnahornyi7663 13 дней назад

    Такий крутий SENIOR що на превʼю фото не передав key проп компоненту

    • @itsDevRoutine
      @itsDevRoutine  13 дней назад

      Я не претендую на "крутого senior-а", хто тобі таке сказав?)
      btw превʼю в прод не піде, обіцяю😉

  • @mSemwolf
    @mSemwolf 14 дней назад +1

    чудовий патерн. вже знаю де використати

  • @DomiNoR777
    @DomiNoR777 17 дней назад

    сложно😬

  • @zikkrype
    @zikkrype 15 дней назад

    Не фанат реакту. Я бекенд. Інколи щось малюю на ангулярі. Але так хотілося би, щоб такі відосики були по ангулярі

  • @dmytro-skh
    @dmytro-skh 14 дней назад

    скріні з кодом занодто коротко по часу показуються

    • @itsDevRoutine
      @itsDevRoutine  14 дней назад

      Так, більше такого не буде
      Хоча там всеодно не було нічого важливого

  • @user-dz8jl7xg5x
    @user-dz8jl7xg5x 12 дней назад

    Tutorial how to how to

  • @user-yq3pc8th1c
    @user-yq3pc8th1c 5 дней назад

    Я хочу від тебе дітей

  • @not8in494
    @not8in494 13 дней назад

    оце ти гудиш дядя. Я хз, хоча б еквалайзером прибирай зайві частоти на відосі

  • @svay6849
    @svay6849 14 дней назад

    Як сеньйор? Ти про що? Зараз ти пишеш як випускник goit. Не треба вчити людей такому.

  • @ukrainianigor
    @ukrainianigor 17 дней назад

    Хз брат побачив превю. видос потом посмотрю но Вижу короче ПРЕВЬЮ. X.firstname X.lastname превью очень п№;датое реально топ выглядит как то завлекло красавчик/ Реально как то превью завлекло Будто буквой Х Короче подписался поставил лайк (посмтрю позже) Я сам со Львова незнаю почему по руски пишу а ти красавчик брат ПРЕВЮ респект

  • @TimaGixe
    @TimaGixe 15 дней назад

    Цікаво, підписка.

  • @ops_rv
    @ops_rv 15 дней назад

    Дякую за контент, використовуємо такий стиль написання компонентів в Ui бібліотеці, зручно.

  • @antonpodkur3520
    @antonpodkur3520 17 дней назад

    топ контент