Cash — это легковесная библиотека, предлагающая синтаксис, похожий на jQuery, но с минимальным весом и высокой производительностью. Для использования Cash в React-проекте достаточно установить пакет через npm или yarn:
npm install cash-dom
или
yarn add cash-dom
Импорт в компоненте React осуществляется стандартным образом:
import $ from 'cash-dom';
После этого $ становится доступным для работы с
элементами DOM внутри компонентов.
В React доступ к DOM-узлам часто осуществляется через рефы
(useRef или createRef). Cash отлично
сочетается с этим подходом. Например, для получения доступа к
DOM-элементу:
import React, { useRef, useEffect } from 'react';
import $ from 'cash-dom';
function ExampleComponent() {
const divRef = useRef(null);
useEffect(() => {
$(divRef.current).css('color', 'blue').text('Текст изменен через Cash');
}, []);
return <div ref={divRef}>Изначальный текст</div>;
}
В данном примере метод css позволяет менять стили, а
text — содержимое элемента. Cash автоматически нормализует
работу с DOM в разных браузерах, упрощая манипуляции.
Cash поддерживает селекторы CSS в стиле jQuery:
$('.my-class'); // выбор всех элементов с классом
$('#my-id'); // выбор элемента по ID
$('div > p'); // выбор вложенных элементов
В React рекомендуется использовать селекторы осторожно, чтобы не нарушать концепцию виртуального DOM. Оптимальная практика — ограничивать выборку через рефы или локальные контейнеры:
useEffect(() => {
$(divRef.current).find('p.highlight').addClass('active');
}, []);
Метод find позволяет выполнять поиск по дочерним
элементам внутри контейнера, выбранного через Cash.
Cash предоставляет удобные методы для управления классами элементов:
addClass(className) — добавляет классremoveClass(className) — удаляет классtoggleClass(className) — переключает классПример интеграции с React:
useEffect(() => {
const $button = $(buttonRef.current);
$button.on('click', () => {
$button.toggleClass('active');
});
}, []);
Важно удалять обработчики событий при размонтировании компонента, чтобы избежать утечек памяти:
useEffect(() => {
const $button = $(buttonRef.current);
const handleClick = () => $button.toggleClass('active');
$button.on('click', handleClick);
return () => $button.off('click', handleClick);
}, []);
Методы attr и data позволяют управлять
атрибутами и пользовательскими данными элементов:
$(element).attr('title', 'Новая подсказка');
$(element).data('key', 'value');
Чтение значения выполняется аналогично:
const value = $(element).data('key');
Это особенно полезно для хранения состояния, связанного с конкретным элементом, без использования глобальных переменных.
Cash поддерживает методы для работы с текстом и HTML:
text() — получение или установка текстового
содержимогоhtml() — получение или установка HTML-кодаПример изменения списка:
$(listRef.current)
.append('<li>Новый элемент</li>')
.prepend('<li>Первый элемент</li>');
Методы append и prepend позволяют добавлять
элементы без необходимости напрямую работать с innerHTML,
сохраняя реактивность React.
Cash поддерживает подписку на события через on и отписку
через off:
$(buttonRef.current).on('mouseenter', () => {
console.log('Наведение на кнопку');
});
Для управления множественными событиями можно передавать объект:
$(divRef.current).on({
mouseenter: () => console.log('Наведение'),
mouseleave: () => console.log('Уход')
});
Это позволяет централизованно управлять поведением элементов.
Cash включает методы hide, show,
fadeIn, fadeOut, slideUp,
slideDown. Они удобны для простых эффектов без подключения
тяжелых библиотек:
$(divRef.current).fadeOut(500, () => {
console.log('Анимация завершена');
});
В React анимации через Cash лучше применять к элементам с локальным управлением видимости, чтобы не нарушать синхронизацию виртуального DOM.
Cash не конфликтует с хуками, но требует аккуратности в
useEffect:
current в useRef
перед использованием $().off при размонтировании.useEffect после их рендера.Пример с динамическим списком:
const [items, setItems] = useState([]);
useEffect(() => {
$(listRef.current).find('li').on('click', function() {
$(this).toggleClass('selected');
});
return () => {
$(listRef.current).find('li').off('click');
};
}, [items]);
Так достигается корректная работа событий для элементов, добавленных в DOM после обновления состояния.
Использование Cash в React оправдано для небольших и средних проектов или при необходимости быстрой работы с DOM. Для крупных приложений:
$() на больших деревьях
элементов.Cash сочетает простоту jQuery-подобного синтаксиса с современной реактивной архитектурой. Он упрощает:
Правильная интеграция с хуками позволяет безопасно использовать библиотеку без нарушения принципов виртуального DOM, обеспечивая компактный и эффективный код.