Библиотека Cash — это легковесная альтернатива jQuery, ориентированная на работу с DOM, манипуляции элементами и событийное программирование. Одной из её сильных сторон является интеграция с современными реактивными подходами через наблюдателей и систему реактивных данных.
Реактивность в Cash строится на принципе автоматического отслеживания изменений данных и их влияния на DOM. При изменении состояния переменной, привязанной к элементу интерфейса, Cash автоматически обновляет соответствующие узлы без необходимости вручную переписывать содержимое.
Простейший пример реактивной переменной:
let state = cash.observable({ count: 0 });
state.subscribe('count', value => {
cash('#counter').text(value);
});
state.count = 1; // Автоматически обновит текст элемента с id "counter"
Ключевые моменты:
cash.observable(obj) создаёт реактивный объект.subscribe(property, callback) позволяет следить за
конкретным свойством объекта.state.count = 1) запускает подписанные колбэки.Для массивов и коллекций данных Cash предоставляет специальные методы для наблюдения за элементами массива, что позволяет динамически управлять списками в DOM без ручного перебора:
let items = cash.observableArray(['яблоко', 'банан']);
items.subscribe(change => {
let list = cash('#list');
list.empty();
change.newValue.forEach(item => list.append(`<li>${item}</li>`));
});
items.push('груша'); // Автоматически добавится в DOM
Особенности:
cash.observableArray(array) создаёт реактивный
массив.add, remove, update) и новом
значении.push, splice,
pop) перехватываются и триггерят обновления DOM.Cash поддерживает вычисляемые свойства, которые автоматически пересчитываются при изменении зависимостей. Это позволяет строить сложные интерфейсы без лишнего кода:
let state = cash.observable({ a: 2, b: 3 });
let sum = cash.computed(() => state.a + state.b);
sum.subscribe(value => console.log('Сумма:', value));
state.a = 5; // Выведет "Сумма: 8"
Особенности вычисляемых свойств:
cash.computed(fn) создаёт реактивное значение,
зависящее от других реактивных переменных.subscribe)
срабатывает при изменении любой зависимости.Cash поддерживает глубокое отслеживание вложенных объектов. При изменении внутренних свойств реактивного объекта подписчики получают уведомления:
let state = cash.observable({
user: { name: 'Иван', age: 25 }
});
state.subscribe('user.name', value => {
cash('#username').text(value);
});
state.user.name = 'Пётр'; // Элемент с id "username" обновится
Особенности глубокой реактивности:
'user.name').Cash предоставляет методы для удаления или временной приостановки подписок, что важно для оптимизации производительности при работе с большим количеством реактивных данных:
let sub = state.subscribe('count', value => console.log(value));
sub.unsubscribe(); // Отменяет подписку
Особенности управления подписками:
unsubscribe.Реактивные данные тесно интегрируются с событиями Cash, что позволяет создавать интерактивные интерфейсы без явной логики синхронизации:
let state = cash.observable({ text: '' });
cash('#input').on('input', e => state.text = e.target.value);
state.subscribe('text', value => cash('#output').text(value));
Преимущества такого подхода:
Cash оптимизирует работу реактивной системы с помощью:
Это делает библиотеку подходящей даже для сложных интерфейсов с большим количеством элементов и динамических списков.
Реактивность и наблюдатели в Cash создают мощный механизм управления состоянием, позволяющий строить динамические и интерактивные веб-приложения с минимальной нагрузкой на разработчика и высокоэффективным обновлением интерфейса.