Fresh — это современный фреймворк для разработки веб-приложений на Deno, ориентированный на серверный рендеринг с минимальной нагрузкой на клиент. Основная цель Fresh — упрощение создания компонентов и их композиции, обеспечивая быстрый отклик и оптимизацию ресурсов.
Компонент в Fresh — это функция, которая возвращает JSX-структуру. Компоненты бывают классические и островные (islands). Островные компоненты позволяют использовать интерактивность на клиенте только там, где это необходимо, сохраняя остальную часть страницы статичной.
export default function Header() {
return (
<header>
<h1>Fresh Example</h1>
</header>
);
}
Ключевые моменты:
client:.Композиция компонентов — это способ объединять простые компоненты для создания сложных интерфейсов. Fresh поддерживает:
Компоненты могут содержать другие компоненты, передавая им данные через props:
function Button({ label }) {
return <button>{label}</button>;
}
export default function Page() {
return (
<div>
<h2>Добро пожаловать</h2>
<Button label="Кликни меня" />
</div>
);
}
Особенность Fresh в том, что даже при глубокой вложенности рендеринг остаётся оптимизированным, так как сервер отдаёт уже готовый HTML.
Props позволяют передавать данные и функции между компонентами. Это ключевой инструмент для создания переиспользуемых компонентов.
function Card({ title, content }) {
return (
<div className="card">
<h3>{title}</h3>
<p>{content}</p>
</div>
);
}
export default function App() {
return (
<div>
<Card title="Первая карточка" content="Содержимое карточки" />
<Card title="Вторая карточка" content="Ещё одна карточка" />
</div>
);
}
Использование props обеспечивает чистоту компонентов, делая их независимыми и легко тестируемыми.
Fresh позволяет добавлять интерактивность только там, где она нужна.
Для этого используется директива client:. Такие компоненты
рендерятся на сервере, но получают возможность работать на клиенте с
JavaScript.
/** @jsx h */
import { h } from "preact";
export default function Counter() {
let count = 0;
return (
<button client:load onCl ick={() => count++}>
{count}
</button>
);
}
Особенности:
function Layout({ children }) {
return (
<main>
<header>Header</header>
{children}
<footer>Footer</footer>
</main>
);
}
export default function Home() {
return (
<Layout>
<p>Главный контент страницы</p>
</Layout>
);
}
map.const items = ["Яблоко", "Банан", "Вишня"];
export default function List() {
return (
<ul>
{items.map(item => (
<li>{item}</li>
))}
</ul>
);
}
function Toggle({ onToggle }) {
return <button onCl ick={onToggle}>Переключить</button>;
}
export default function App() {
const handleToggle = () => console.log("Переключено");
return <Toggle onTog gle={handleToggle} />;
}
Композиция компонентов в Fresh строится вокруг чистоты, повторного использования и оптимизации. Она позволяет создавать сложные интерфейсы с минимальными затратами ресурсов и высокой производительностью.