Mind.js представляет собой библиотеку для управления состоянием и реактивного программирования в JavaScript. Центральной концепцией является менеджер состояний, который позволяет хранить, отслеживать и изменять данные приложения в структурированном виде. В основе работы лежат наблюдаемые объекты и подписки на изменения, что делает возможным построение динамических интерфейсов без необходимости вручную управлять обновлениями DOM.
Состояния создаются с помощью функции createState. Она
принимает начальное значение и возвращает объект состояния:
const count = createState(0);
Для группировки нескольких состояний используется стейт-менеджер:
const appState = new Mind.StateManager({
count: createState(0),
user: createState({ name: 'Алексей', loggedIn: false })
});
Ключевые моменты:
appState.states.Состояние читается напрямую через свойство .value:
console.log(count.value); // 0
Изменение значения выполняется также через .value:
count.value += 1;
Для объектов и массивов предусмотрены методы update, позволяющие безопасно изменять структуру данных:
appState.states.user.update(user => {
user.loggedIn = true;
});
update обеспечивает корректное
уведомление всех подписчиков о произошедших изменениях.update может
не вызвать реакцию подписчиков.Подписки создаются с помощью метода .subscribe:
count.subscribe(newValue => {
console.log('Новое значение:', newValue);
});
Особенности подписки:
const unsubscribe = count.subscribe(value => console.log(value));
unsubscribe(); // прекращает отслеживание изменений
Mind.js поддерживает вычисляемые состояния, которые автоматически обновляются при изменении зависимых состояний:
const doubleCount = createDerivedState(() => count.value * 2);
doubleCount.subscribe(value => console.log('Двойное значение:', value));
createDerivedState принимает функцию, возвращающую
вычисленное значение.Состояния Mind.js легко интегрируются с компонентной архитектурой, например с React или Vue. В React это реализуется через подписку на изменение состояния внутри эффекта:
useEffect(() => {
const unsubscribe = count.subscribe(setCount);
return () => unsubscribe();
}, []);
.subscribe внутри жизненного цикла
компонента обеспечивает синхронизацию интерфейса с состоянием.Для масштабных приложений рекомендуется:
Разделять состояния по модулям:
const authState = new Mind.StateManager({ user: createState(null) });
const cartState = new Mind.StateManager({ items: createState([]) });Использовать derived states для вычислений, минимизируя прямую логику в компонентах.
Групповые подписки на менеджер состояний, чтобы отслеживать глобальные изменения:
appState.subscribe(states => {
console.log('Изменения в состоянии приложения:', states);
});
update.push,
splice через update.Mind.js обеспечивает гибкую реактивную архитектуру, где менеджер состояний становится центром управления данными приложения, а подписки и derived states позволяют поддерживать актуальность интерфейса без избыточного кода. Такой подход упрощает масштабирование и поддержку больших проектов.