Fresh — это современный подход к построению веб-приложений на JavaScript, ориентированный на создание реактивных и переиспользуемых компонентов. В основе лежит идея минимизации объёма загружаемого кода и обеспечения мгновенной интерактивности без необходимости сложных сборщиков. Компоненты в Fresh создаются как чистые функции, возвращающие структуру интерфейса, что позволяет легко управлять состоянием и интегрировать их в разные части приложения.
Компонент в Fresh обычно представлен функцией, которая принимает props и возвращает HTML-структуру:
export default function Button({ label, onClick }) {
return (
<button onCl ick={onClick} class="btn">
{label}
</button>
);
}
Ключевые моменты:
Fresh поддерживает реактивное состояние с использованием хуков,
аналогичных React. Основной механизм — useState:
import { useState } from "fresh/hooks";
export default function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Счётчик: {count}</p>
<button onCl ick={() => setCount(count + 1)}>Увеличить</button>
</div>
);
}
Особенности:
Компоненты можно вкладывать друг в друга для построения сложного интерфейса:
function Card({ title, content }) {
return (
<div class="card">
<h2>{title}</h2>
<p>{content}</p>
</div>
);
}
export default function Dashboard() {
return (
<section>
<Card title="Новости" content="Последние события" />
<Card title="Задачи" content="Список задач на сегодня" />
</section>
);
}
Преимущества:
Компоненты в Fresh позволяют привязывать обработчики событий напрямую к элементам:
export default function Toggle() {
const [isOn, setIsOn] = useState(false);
const handleClick = () => setIsOn(!isOn);
return (
<button onCl ick={handleClick}>
{isOn ? "Включено" : "Выключено"}
</button>
);
}
Особенности:
Fresh поддерживает динамический импорт компонентов, что позволяет уменьшить первоначальный размер бандла:
const LazyComponent = await import("./LazyComponent.js");
export default function Page() {
return (
<div>
<h1>Страница с ленивой загрузкой</h1>
<LazyComponent.default />
</div>
);
}
Преимущества динамической загрузки:
Fresh не навязывает способ стилизации. Возможные подходы:
Пример с CSS Module:
import styles from "./Button.module.css";
export default function Button({ label }) {
return <button class={styles.primary}>{label}</button>;
}
Особенности:
Fresh обеспечивает современный и легкий способ разработки веб-приложений, концентрируясь на реактивности, модульности и простоте интеграции компонентов.