Fresh — это подход к обновлению состояния компонентов и данных в приложениях на JavaScript, основанный на принципах иммутабельности, чистых функций и оптимизации рендеринга. В контексте современных фреймворков и библиотек (React, Preact, Solid) Fresh обеспечивает эффективное управление состоянием, минимизируя лишние пересчёты и обновления интерфейса.
Ключевой принцип Fresh — работа с неизменяемыми объектами и массивами. При изменении состояния создаётся новая копия данных, а не модифицируется существующая. Это позволяет:
Пример иммутабельного обновления массива:
const todos = ['Купить хлеб', 'Помыть машину'];
// Добавление нового элемента
const newTodos = [...todos, 'Сделать домашку'];
// Удаление элемента
const filteredTodos = todos.filter(todo => todo !== 'Купить хлеб');
Fresh предполагает использование чистых функций для изменения состояния. Чистая функция не имеет побочных эффектов и возвращает новое значение на основе входных данных.
Пример функции для обновления состояния:
function updateCounter(counter, increment) {
return counter + increment;
}
let count = 0;
count = updateCounter(count, 1); // 1
count = updateCounter(count, 3); // 4
Преимущество чистых функций в том, что состояние становится предсказуемым и легко тестируемым.
Fresh позволяет контролировать процесс рендеринга компонентов. Основная идея — обновлять только изменённые части интерфейса, а не весь компонент целиком. Это достигается через:
useMemo,
React.memo в React).Пример мемоизации:
const expensiveCalculation = (num) => {
console.log('Вычисление...');
return num * 2;
};
const memoizedResult = React.useMemo(() => expensiveCalculation(5), [5]);
Островки — отдельные участки интерфейса, которые обновляются независимо. Fresh в островках означает, что состояние каждого островка:
Пример структуры островка:
function CounterIsland() {
const [count, setCount] = React.useState(0);
return (
<div>
<p>Счётчик: {count}</p>
<button onCl ick={() => setCount(prev => prev + 1)}>Увеличить</button>
</div>
);
}
Каждый островок обновляет только свои внутренние состояния, не затрагивая остальную страницу.
Fresh облегчает работу с SSR (Server-Side Rendering), так как иммутабельные данные и чистые функции позволяют точно предсказать, какие участки страницы требуют обновления на клиенте. При использовании island-архитектуры сервер генерирует статический HTML, а островки получают возможность обновления на клиенте без полной перерисовки.
Эти принципы позволяют создавать быстрые, предсказуемые и легко поддерживаемые интерфейсы, где каждое изменение состояния контролируемо и оптимизировано.
Fresh в сочетании с island-архитектурой позволяет строить гибкие, высокопроизводительные веб-приложения, где обновления состояния происходят локально и эффективно, без лишних пересчётов и перегрузки рендеринга.