Show your code Saturday: код-рев’ю #13
Коментар редакції. Show your code Saturday — це інтерактивна рубрика, у якій кожен охочий може поділитися власним проєктом, написавши про нього в коментарях. А ми натомість щосуботи обираємо найцікавіший і розповідатимемо детальніше.
Сьогодні ми хочемо поділитися з вами роботою користувачи Andrii Yevchenko.
Наш активний учасник спільноти Максим Рудний зробив код-рев’ю проєкту! Тож далі передаємо слово Максиму 👇
Дисклеймер: я не є автором коду і не знаю причин реалізації будь-якої частини коду таким чином, як це є. Стиль написання коду без ознайомлення з Code Style та Code Convention проєкту не можу критикувати, може це так було задумано.
Сьогоднішній проєкт мені дуже сподобався. Нарешті у нас нема NextJS, TypeScript та Tailwind, які уже стали якимось неофіційним стандартом. Проєкт написаний на чистому React + Vite, стилізація — SCSS.
Хоч автор і каже що він початківець, але в коді використовує декілька цікавих React дизайн-патернів, про які зараз і поговоримо.
Патерн Compound Components
Цей патерн дозволяє розбити функціональність на кілька підкомпонентів, кожен із яких має чітко визначену роль. Вони спільно використовують контекст для комунікації та можуть бути розміщені користувачем у довільному порядку для кращої гнучкості.Компонент Form побудований за допомогою Compound Components.
Інші компоненти використовують контекст форми наступним чином:
Я б і не згадав про цей патерн, який автор не об’єднав його з іншим патерном.
Namespace Components
Також його ще називають Static Properties Pattern. Його суть полягає в тому, що головний компонент (в цьому випадку FormComponent) експортується разом із підкомпонентами як статичні властивості цього компонента. В коді виглядає це наступним чином:
Про переваги та недоліки я розповідаю у відео.
Стилізація компонентів
Для стилізації використовується SCSS, що є прийнятним варіантом, а от BEM (Block, Element, Modifier) тут уже зайвий. За всі роки роботи з React практично не бачив використання BEM з React, адже він максимально не підходить до компонентної архітектури. Гляньмо на наступний компонент:
import './ControlPanel.scss'; export const ControlPanel = ({ title, children }) => { return ( <div className="control-panel"> <h2 className="control-panel__title">{title}</h2> {children} </div> ); };
А стилі для цього компоненту виглядають ось так:
.control-panel { display: flex; justify-content: space-between; padding: 2rem; margin-bottom: 1rem; // border-top: 4px solid #00000030; border-bottom: 4px solid #00000030; flex-wrap: wrap; align-items: center; gap: 1rem; @media screen and (max-width: 430px) { gap: 1rem; flex-direction: column; } &__title { font-size: 2.5rem; font-weight: 700; color: #00000030; text-shadow: 3px 3px 15px #00000030; } &__buttons { display: flex; gap: 1rem; > * { font-size: 1.2rem; font-weight: 600; display: flex; align-items: center; justify-content: center; text-align: center; background-color: transparent; box-shadow: 3px 3px 15px 0px #00000030; border-radius: 0.5rem; border: 3px solid #00000030; padding: 0.5rem; color: #00000030; &:active { transform: translate(1px, 1px); } } } &__play { color: #fff; border: 3px solid #fff; } &__result { display: flex; align-items: center; justify-content: center; color: #000; background-color: #00000030; box-shadow: 3px 3px 15px 0px #00000030; border-radius: 0.5rem; border: 3px solid transparent; padding: 0.5rem 2rem; font-size: 1.2rem; line-height: 1.25; font-weight: 600; @media screen and (max-width: 495px) { order: 3; } } }
В компоненті у нас є лише 2 класи: control-panel та control-panel__title. Все решта буде в {children}. Ми не маємо ні найменшого явлення, що там має бути. А от стилів у нас описано для безлічі елементів, таких як control-panel__play, control-panel__result, control-panel__buttons. Виходить що стилі є, а елементів — нема.
Якщо у вас є позитивний досвід використання BEM з React — поділіться.
Висновок
Є ще зауваження до якості коду та файловій організації проєкту, але то все не критично і згадується у відео.Окремо хочу відзначити ReadMe проєкту. Автор постарався все детально і якісно описати. Рідкісне явище на наших оглядах.
Якщо цікавий чи корисний огляд — підписуйтесь на мій YouTube або слідкуйте за спільнотою в Telegram. Там ще більше корисних матеріалів.
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів