MUI в React і як його кастомізувати

MUI в React і як його кастомізувати

  • 2 жовтня
  • читати 20 хв
Володимир Шайтан
Володимир Шайтан Senior Full Stack Developer у UKEESS Software House, Викладач Комп'ютерної школи Hillel.
Крістіна Димитрова
Крістіна Димитрова Project Manager у Accumulator Digital Agency

Більшість моїх студентів, коли тільки приходять на курси, думають, що створити користувацький інтерфейс — це приблизно понаставляти кнопочок і полів для вводу в різних місцях на якомусь анімованому фоні з описом продукту.

Але якщо ви спитаєте мене про це на глибшому рівні, то я вам скажу, що створення користувацьких інтерфейсів — це не просто додавання кнопок та полів. Це мистецтво, де кожна деталь повинна гармонійно поєднуватись, як у музичній симфонії, забезпечуючи плавний користувацький досвід. У бібліотеці Material-UI вже закладені чудові інструменти, але справжня магія починається тоді, коли ви берете стандартні компоненти й додаєте їм індивідуальності.

А якщо серйозно, то Material-UI (далі MUI) — це популярна бібліотека компонентів для React, де можна створювати інтерфейси, дотримуючись принципів Material Design. Зараз поясню що це і про що.

Material Design — це мова дизайну, яка була розроблена Google у 2014 році.

ОСНОВНІ ПРИНЦИПИ MATERIAL DESIGN

  1. Метафора чогось фізичного (матеріального)
    Інтерфейси імітують властивості реальних об’єктів, наче це фізичні матеріали. Наприклад, поверхні мають товщину, реагують на світло та тінь, створюючи ілюзію тривимірності.
  2. Сміливі кольори та чітка типографіка
    Використовуються яскраві кольори, чіткий текст і прості форми для забезпечення зрозумілої та чіткої взаємодії з інтерфейсом.
  3. Змістовні анімації
    Анімації допомагають користувачам зрозуміти взаємозв’язки між елементами інтерфейсу, пояснюючи, що відбувається на екрані (перехід від одного стану інтерфейсу до іншого).
  4. Ієрархія та фокус уваги
    Важливі елементи виділяються за допомогою кольору, розміру або розташування, спрямовуючи увагу користувача на основну інформацію.
  5. Адаптивність
    Дизайн має підлаштовуватися до різних розмірів екранів, забезпечуючи коректне відображення як на мобільних пристроях, так і на настільних комп’ютерах.

У цій статті ми розглянемо, як зробити цей самий правильний користувацький інтерфейс за допомогою двох різних, але потужних методів кастомізації: makeStyles і sx. Готові підняти свою майстерність кастомізації на новий рівень? Тоді почнемо!

ЩО ТАКЕ КАСТОМІЗАЦІЯ КОМПОНЕНТІВ MUI І ЧОМУ ВОНА ПОТРІБНА?

MUI надає велику бібліотеку готових компонентів для React, які вже стилізовані та зручні для використання «з коробки». Однак у реальних проєктах часто потрібно адаптувати дизайн до унікальних вимог інтерфейсу, що вимагає кастомізації цих компонентів.

Кастомізація компонентів MUI потрібна для:

  • Уніфікації дизайну: кожен проєкт має свої вимоги до стилю, і кастомізація дозволяє дотримуватися брендбуку або загального стилю застосунку.
  • Покращення UX: деякі інтерфейсні елементи можуть потребувати специфічних змін для покращення взаємодії користувача з інтерфейсом.
  • Адаптація до різних платформ: залежно від цільової платформи, компоненти можуть потребувати різного вигляду або поведінки (наприклад, для мобільної версії).
  • Покращення продуктивності: кастомізація дозволяє виключати зайві стилі та логіку, що може позитивно вплинути на продуктивність додатка.
  • Гнучкості у розробці: дозволяє швидко адаптувати компоненти під різні вимоги без необхідності створювати їх з нуля, що пришвидшує процес розробки.
  • Підтримка доступності: кастомізація допомагає впровадити елементи, які відповідають стандартам доступності (наприклад, правильні відступи, контрасти, фокус).
  • Покращення коду: дає змогу створювати чистіший, підтримуваний код, оскільки компоненти можна стандартизувати. Наприклад, через змінні, що зменшує шанси на дублювання стилів.
  • Підвищення інтеграції з іншими бібліотеками: спрощує використання сторонніх інструментів, таких як анімації або сторонні UI-бібліотеки, через розширену кастомізацію.

Таким чином, кастомізація компонентів MUI забезпечує гнучкість, необхідну для створення унікальних і адаптивних інтерфейсів, які відповідають вимогам конкретного проєкту.

MUI ПРОПОНУЄ ДВА ОСНОВНИХ СПОСОБИ СТИЛІЗАЦІЇ:

  • makeStyles — класичний підхід з використанням CSS-in-JS через хуки.
  • sx — новий API, який дозволяє писати стилі в форматі JSX прямо в компоненті.

ПЕРШИЙ КРОК ДО КАСТОМІЗАЦІЇ: MAKESTYLES — СИЛА JAVASCRIPT СТИЛІВ

makeStyles — це хук, наданий MUI, який дозволяє створювати об'єкт стилів і потім застосовувати його до компонентів. Цей метод зручний, якщо ви хочете чітко відокремити логіку стилів від логіки компонента.

Уявімо, що ви створюєте унікальну кнопку для вашого проєкту. Ось як це можна зробити за допомогою makeStyles:

import React from 'react';
import { Button } from '@mui/material';
import { makeStyles } from '@mui/styles';

const useStyles = makeStyles({
    customButton: {
        backgroundColor: '#ff5722',  // Яскравий і запам'ятовуваний колір
        color: '#ffffff',
        '&:hover': {
            backgroundColor: '#e64a19',  // Легка інтерактивність при наведенні  },
        borderRadius: '50px',  // Заокруглені краї додають "дружелюбності"
        padding: '12px 24px',
        transition: 'all 0.3s ease',  // Плавний перехід
    },
});

const CustomButton = () => {
    const classes = useStyles();

    return (
        <Button className={classes.customButton}>
            Натисни мене!
        </Button>
    );
};

export default CustomButton;

ЯК ЦЕ ПРАЦЮЄ

  • makeStyles створює об'єкт із правилами CSS,  
  • використовуючи classes.customButton, ми передаємо стилі компонента MUI Button.  
  • стиль застосовується з урахуванням динамічних станів, таких як hover.

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

Тож що такого особливого в makeStyles?

  • Динамічна природа: потрібно змінити стилі залежно від пропсів? Легко! makeStyles дозволяє використовувати логіку JavaScript для керування стилями залежно від стану компонентів.
  • Чистота коду: стилі винесені окремо від структури компонента, що спрощує їх підтримку та модифікацію.

Але makeStyles — це не єдиний шлях. Познайоммося з більш сучасним й інтуїтивним методом.

ЛАСКАВО ПРОСИМО ДО СВІТУ SX: КАСТОМІЗАЦІЯ НІКОЛИ НЕ БУЛА ПРОСТІШОЮ

З MUI версії 5 з'явилася нова можливість кастомізації компонентів — використання атрибута sx.

Це потужний інструмент, який дозволяє описувати стилі прямо в компоненті як об'єкт JavaScript. Він поєднує зручність написання inline-стилів із гнучкістю та функціональністю CSS.

Створімо ту саму кнопку, але вже з використанням sx:

import React from 'react';
import { Button } from '@mui/material';

const CustomButton = () => {
    return (
        <Button
            sx={{
                backgroundColor: '#ff5722',
                color: '#fff',
                '&:hover': {
                    backgroundColor: '#e64a19',
                },
                borderRadius: '50px',
                padding: '12px 24px',
                transition: 'all 0.3s ease',
            }}
        >
            Натисни мене!
        </Button>
    );
};

export default CustomButton;

Зауважте, як компактно виглядають стилі з використанням sx. Виглядає зручно, правда?

Тепер немає потреби створювати додаткові змінні або класи. Усе знаходиться там, де й повинно бути — прямо в JSX. Це робить роботу швидшою, а результат — прозорішим.

Чому sx став таким популярним?

  • Легкість використання: це ідеальний варіант для швидкої кастомізації, особливо коли потрібно внести невеликі зміни «на ходу», або вже на проді, якщо вже казати прямо :)
  • Тема під рукою: sx дозволяє легко інтегрувати тему вашого застосунку, використовуючи вбудовані змінні, такі як відступи, кольори й інші елементи теми.

Секрети потужної кастомізації з sx і темами.

Припустимо, у вас у проєкті налаштована тема, і ви хочете, щоб ваш компонент динамічно підлаштовувався під неї. Створімо кнопку, яка використовуватиме кольори з вашої теми:

import React from 'react';
import { Button } from '@mui/material';
import { useTheme } from '@mui/material/styles';

const ThemedButton = () => {
    const theme = useTheme();

    return (
        <Button
            sx={{
                backgroundColor: theme.palette.primary.main,
                color: theme.palette.common.white,
                '&:hover': {
                    backgroundColor: theme.palette.primary.dark,
                },
                padding: theme.spacing(2),
                borderRadius: '4px',
            }}
        >
            Тематична кнопка
        </Button>
    );
};

export default ThemedButton;

У прикладі вище ми інтегрували тему прямо в компонент. Тепер ваша кнопка буде виглядати органічно, незалежно від того, світла у вас тема чи темна. Це робить дизайн гнучким і готовим до змін у майбутньому.

ЩО ВИБЕРЕТЕ: makeStyles ЧИ ВСЕ Ж ТАКИ SX? ЯК ВИБРАТИ?

ПРОДУКТИВНІСТЬ

  • sx має перевагу в продуктивності завдяки тому, що він компілює стилі безпосередньо під час рендерингу компонентів, що зменшує навантаження на браузер. Це може бути важливим фактором у великих проєктах з численними компонентами, де швидкість рендерингу має значення.
  • makeStyles використовує CSS-in-JS, що може створити певний наклад при обробці стилів, особливо якщо ви часто змінюєте стилі у великих компонентах.

КАСТОМІЗАЦІЯ

  • Якщо вам потрібно створити складні стилі або використовувати CSS-селектори, makeStyles може виявитися більш слушним. Він дозволяє вам застосовувати логіку стилізації, наприклад, динамічне налаштування стилів залежно від стану компонента.
  • sx також підтримує кастомізацію, але він більше підходить для простих стилів. Наприклад, для швидкого налаштування кольорів, відступів або розмірів компонентів, використання sx буде простішим і швидшим.

ЧИТАБЕЛЬНІСТЬ КОДУ

  • Використання sx зазвичай робить код більш читабельним, оскільки стилі написані безпосередньо в компоненті, і ви бачите їх у контексті. Це особливо корисно для простих компонентів, де логіка стилів не є складною.
  • makeStyles може призвести до розділення стилів і логіки компонента, що в деяких випадках може ускладнити розуміння, як компоненти виглядають і поводяться.

СУМІСНІСТЬ ІЗ КЛАСИЧНИМ CSS

  • Якщо ваш проєкт вже використовує класичні CSS-файли або інші CSS-інструменти, makeStyles може бути кращим вибором, оскільки ви зможете легше інтегрувати стилі з інших джерел.
  • sx добре працює в середовищах, де ви повністю використовуєте MUI, але вам буде важче інтегрувати його з зовнішніми стилями.

КОМБІНАЦІЯ ОБОХ ПІДХОДІВ

  • У деяких випадках ви можете комбінувати обидва підходи. Наприклад, ви можете використовувати sx для основних стилів компонентів, а makeStyles для обробки складніших стилів або умовних стилів, де це необхідно. Це дозволяє максимально використовувати переваги обох методів, зберігаючи при цьому код чистим і зрозумілим.

СПІВПРАЦЯ В КОМАНДІ

  • Якщо ваша команда вже звикла до одного з методів, може бути доцільно дотримуватися обраного підходу для підтримки консистентності в кодовій базі.
  • У великих командах важливо узгоджувати методи стилізації, щоб уникнути плутанини та спростити процес підтримки коду.

ВИСНОВОК

Кастомізація — це не просто технічний прийом, а ключ до створення унікального та функціонального інтерфейсу, що резонує з вашими користувачами.

Коли ви використовуєте потужні інструменти, такі як makeStyles і sx, ви не лише адаптуєте компоненти до своїх потреб, але й творите емоційний зв’язок із вашою аудиторією, а це в наш час на вагу золота, бо конкуренція не знижується, до речі.

Нехай ваші інтерфейси стануть відображенням вашої креативності та уваги до деталей. Експериментуйте з кольорами, формами та анімаціями, щоб кожен елемент вашого проєкту працював у гармонії. Пам’ятайте, що кастомізація — це не лише технічний аспект, а й можливість створити досвід, який залишить унікальний слід у пам’яті користувачів.

Тож не бійтеся виходити за межі стандартів, створюйте компоненти, які не лише задовольняють вимоги, а й надихають. Використовуйте вашу креативність, щоб зробити ваш проєкт дійсно незабутнім.

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

До зустрічі в цьому ж місці та в той самий час :)

Рекомендуємо публікації по темі