Тема: Створення каркаса додатка та базових UI-компонентів Проєктування архітектури React-додатка, використання методології Atomic Design та стилізація через CSS Modules.
Мета: Створити каркас майбутнього веб-застосунку (соціальна мережа або таск-менеджер), розробити набір перевикористовуваних “атомарних” компонентів (Button, Input, Card) та налаштувати їх стилізацію.
Технологічний стек: React, Vite, CSS Modules.
Button, Input, Typography.Card.App.jsx.Використовуючи навички з Практичного заняття 1, створіть новий проєкт або використайте існуючий.
src/assets/react.svg, src/App.css.
Очистіть src/index.css (або залиште лише базовий скидання стилів).
У src/App.jsx видаліть весь код і залиште лише порожній div або фрагмент.Для організації файлів ми використаємо підхід Atomic Design, який передбачає поділ інтерфейсу на дрібні незалежні частини.
Створіть у папці src наступну структуру:
src/
|– components/
| |– atoms/ (Кнопки, інпути, іконки, текст)
| |– molecules/ (Поля форм, картки, списки)
| |– organisms/ (Хедер, футер, складні форми)
| |– pages/ (Сторінки цілком)
React фокусується на компонентній архітектурі, де кожен елемент містить свою логіку та розмітку. Ми також використаємо CSS Modules для ізоляції стилів, щоб уникнути конфліктів імен.
Створіть файли src/components/atoms/Button/Button.jsx та Button.module.css.
Button.jsx:
import styles from './Button.module.css';
// Використовуємо деструктуризацію пропсів
const Button = ({ children, onClick, variant = 'primary' }) => {
return (
<button
className={`${styles.button} ${styles[variant]}`}
onClick={onClick}
> {children}
> </button>
> );
> };
export default Button;
Button.module.css:
.button {
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
transition: opacity 0.3s;
}
.button:hover {
opacity: 0.8;
}
.primary {
background-color: #007bff;
color: white;
}
.secondary {
background-color: #6c757d;
color: white;
}
Створіть src/components/atoms/Input/Input.jsx та Input.module.css. Компонент має приймати пропси type, placeholder та label.
Завдання: Реалізуйте Input самостійно.
Він має рендерити тег <input> та опціональний <label>, загорнуті у div. Стилізуйте його, щоб він мав відступи та рамку.
Компонент Card слугуватиме контейнером для іншого контенту. Він використовує спеціальний проп children, щоб відобразити все, що передано всередину нього.
Card.jsx:
import styles from "./Card.module.css";
const Card = ({ children }) => {
return <div className={styles.card}>{children}</div>;
};
export default Card;
Card.module.css:
.card {
background: white;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
padding: 24px;
max-width: 400px;
margin: 20px auto;
}
Тепер, використовуючи декларативний підхід React, зберіть сторінку “Входу в систему” (Login UI) у головному файлі.
App.jsx:
import Button from "./components/atoms/Button/Button";
import Input from "./components/atoms/Input/Input"; // Ваш компонент
import Card from "./components/molecules/Card/Card";
function App() {
const handleLogin = () => {
alert("Логіка входу буде реалізована пізніше");
};
return (
<div
style=
>
<Card>
<h2 style=>
Ласкаво просимо
</h2>
<div style=>
{/* Використовуйте ваш компонент Input тут */}
<Input type="email" placeholder="Email" />
</div>
<div style=>
{/* Використовуйте ваш компонент Input тут */}
<Input type="password" placeholder="Пароль" />
</div>
<div style=>
<Button onClick={handleLogin} variant="primary">
Увійти
</Button>
<Button variant="secondary">Реєстрація</Button>
</div>
</Card>
</div>
);
}
export default App;
git commit -m "Setup Atomic Design structure".git commit -m "Add basic atoms and molecules".props.children і в якому компоненті цієї лабораторної роботи ми його використали?class у JSX записується як className?1. Посилання на GitHub-репозиторій надіслати в Classroom 2. В файл lab1.md винести фрагмент коду 3. В файлі lab1.md дати відповіді на контрольні питання