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

Поділитися
Вставка
  • Опубліковано 17 тра 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 - Заключення
  • Наука та технологія

КОМЕНТАРІ • 138

  • @vladprodan7010
    @vladprodan7010 20 днів тому +5

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

  • @user-xd3we2qp4i
    @user-xd3we2qp4i 14 днів тому +1

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

    • @vladyslavbrataniuk1324
      @vladyslavbrataniuk1324 14 днів тому +1

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

  • @BazliMax
    @BazliMax 14 днів тому

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

  • @rosaka14
    @rosaka14 20 днів тому +4

    харош

  • @user-lb6lq5yh5q
    @user-lb6lq5yh5q 20 днів тому +4

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

  • @RR-rw5bc
    @RR-rw5bc 19 днів тому +2

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

  • @inkliuznyk
    @inkliuznyk 14 днів тому

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

  • @ggo_webdev
    @ggo_webdev 14 днів тому

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

  • @antonpodkur3520
    @antonpodkur3520 19 днів тому

    топ контент

  • @renkodima
    @renkodima 19 днів тому +5

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

  • @YuriiKratser
    @YuriiKratser 14 днів тому

    Молодець!

  • @ops_rv
    @ops_rv 16 днів тому

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

  • @VasFree
    @VasFree 20 днів тому +9

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

  • @user-tn3uo6tr3t
    @user-tn3uo6tr3t 15 днів тому

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

  • @devjourney8583
    @devjourney8583 19 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  19 днів тому

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

  • @hasst9261
    @hasst9261 18 днів тому

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

  • @bozhokvictor7740
    @bozhokvictor7740 11 днів тому

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

  • @CodeBeep
    @CodeBeep 19 днів тому +2

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

  • @ruslankovalenko5086
    @ruslankovalenko5086 18 днів тому

    Дуже якісно

  • @CryptoBro7
    @CryptoBro7 20 днів тому +4

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

  • @nemec980
    @nemec980 17 днів тому

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

    • @nemec980
      @nemec980 17 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  17 днів тому

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

  • @spacepirate3279
    @spacepirate3279 19 днів тому +9

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

  • @yourr_dude
    @yourr_dude 19 днів тому

    О файно

  • @pahan35skype
    @pahan35skype 15 днів тому

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

  • @resoursa
    @resoursa 19 днів тому +1

    🥰🥰🥰🥰🥰

  • @maxymbrychka
    @maxymbrychka 18 днів тому

    nice

  • @xczm225
    @xczm225 19 днів тому +1

    підписався!

  • @leroviten
    @leroviten 18 днів тому +4

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

  • @user-yk6iq5hn4d
    @user-yk6iq5hn4d 19 днів тому +2

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

  • @user-yk6iq5hn4d
    @user-yk6iq5hn4d 19 днів тому +1

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

    • @itsDevRoutine
      @itsDevRoutine  19 днів тому +1

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

    • @user-yk6iq5hn4d
      @user-yk6iq5hn4d 19 днів тому

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

  • @AndrewFloatrx
    @AndrewFloatrx 18 днів тому +5

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

    • @itsDevRoutine
      @itsDevRoutine  18 днів тому +1

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

    • @Clo2n
      @Clo2n 14 днів тому

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

  • @rhost-9968
    @rhost-9968 18 днів тому +2

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

    • @itsDevRoutine
      @itsDevRoutine  18 днів тому +1

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

  • @user-lq2us4rc9t
    @user-lq2us4rc9t 19 днів тому +1

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

    • @itsDevRoutine
      @itsDevRoutine  19 днів тому

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

  • @aonteb9celuet262
    @aonteb9celuet262 17 днів тому +8

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

  • @sanfrancisco8426
    @sanfrancisco8426 19 днів тому +4

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

  • @webUtopiaUa
    @webUtopiaUa 19 днів тому +2

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

    • @itsDevRoutine
      @itsDevRoutine  19 днів тому +1

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

  • @hasst9261
    @hasst9261 12 годин тому

    Раджу контент фуйлу readme в репо замінити на щось більш актуальне до теми

  • @artemkatr9483
    @artemkatr9483 20 днів тому +2

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

  • @_g4rv
    @_g4rv 19 днів тому +1

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

    • @itsDevRoutine
      @itsDevRoutine  19 днів тому

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

  • @denisoleksyuk5346
    @denisoleksyuk5346 17 днів тому

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

  • @dmons24
    @dmons24 19 днів тому +2

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

    • @itsDevRoutine
      @itsDevRoutine  19 днів тому

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

  • @user-ji8me7hz1s
    @user-ji8me7hz1s 18 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  18 днів тому +2

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

  • @black_light
    @black_light 17 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  17 днів тому

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

  • @romanroki7528
    @romanroki7528 19 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  19 днів тому

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

    • @romanroki7528
      @romanroki7528 18 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  18 днів тому +1

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

  • @m4es7r0
    @m4es7r0 18 днів тому +1

    о ура про react укр

  • @dennyfedyna9707
    @dennyfedyna9707 8 днів тому

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

  • @AntonYefremov
    @AntonYefremov 14 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  14 днів тому

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

  • @user-pl5we9ub8r
    @user-pl5we9ub8r 16 днів тому

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

  • @OstapBrehin
    @OstapBrehin 14 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  13 днів тому +1

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

    • @OstapBrehin
      @OstapBrehin 13 днів тому

      @@itsDevRoutine який?)

    • @itsDevRoutine
      @itsDevRoutine  13 днів тому

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

  • @amelianceskymusic
    @amelianceskymusic 16 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  16 днів тому +1

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

  • @user-pd1sx5sf7s
    @user-pd1sx5sf7s 15 днів тому

    + 1 в полк shadcn

  • @cyxapik61
    @cyxapik61 16 днів тому

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

  • @boriskleshch8416
    @boriskleshch8416 17 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  17 днів тому +1

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

  • @victormyha882
    @victormyha882 7 днів тому

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

  • @andrii_suprunenko
    @andrii_suprunenko 19 днів тому

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

  • @alexkonoplian
    @alexkonoplian 18 днів тому

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

  • @alexp3617
    @alexp3617 19 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  19 днів тому +1

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

    • @alexp3617
      @alexp3617 17 днів тому

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

  • @thecoolestpro1307
    @thecoolestpro1307 17 днів тому

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

  • @zakirovdamir
    @zakirovdamir 18 днів тому

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

  • @ukrainianigor
    @ukrainianigor 19 днів тому

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

  • @mSemwolf
    @mSemwolf 16 днів тому +1

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

  • @thechrom007
    @thechrom007 18 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  18 днів тому +1

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

    • @GazdaZuBB
      @GazdaZuBB 17 днів тому

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

    • @GazdaZuBB
      @GazdaZuBB 17 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  17 днів тому +1

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

  • @vladyslavnahornyi7663
    @vladyslavnahornyi7663 15 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  15 днів тому

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

  • @DomiNoR777
    @DomiNoR777 18 днів тому

    сложно😬

  • @user-dz8jl7xg5x
    @user-dz8jl7xg5x 14 днів тому

    Tutorial how to how to

  • @zikkrype
    @zikkrype 16 днів тому

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

  • @dmytro-skh
    @dmytro-skh 16 днів тому

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

    • @itsDevRoutine
      @itsDevRoutine  16 днів тому

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

  • @user-yq3pc8th1c
    @user-yq3pc8th1c 7 днів тому

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

  • @not8in494
    @not8in494 15 днів тому

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

  • @svay6849
    @svay6849 15 днів тому

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

  • @ukrainianigor
    @ukrainianigor 19 днів тому

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

  • @TimaGixe
    @TimaGixe 16 днів тому

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

  • @snieda_programming
    @snieda_programming 17 днів тому

    топ контент

  • @ops_rv
    @ops_rv 16 днів тому

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