useSnackbarManager
Хук для управления уведомлениями (снекбарами) в приложении. Позволяет показывать, обновлять и закрывать уведомления программно из любого места в коде.
Связанные компоненты:
Быстрый старт
Хук возвращает два значения: API для управления снекбарами и компонент, который нужно добавить в разметку.
const [snackbarApi, snackbarHolder] = useSnackbarManager();
// Показать уведомление
snackbarApi.open({
children: "Привет, мир!",
});
// Не забудьте добавить holder в JSX
return (
<>
{/* Ваш контент */}
{snackbarHolder}
</>
);Параметры
Все параметры опциональны. Хук можно вызвать без аргументов: useSnackbarManager().
| Параметр | Тип | Описание |
|---|---|---|
limit | number | Максимальное количество одновременно открытых снекбаров на одном placement. По умолчанию: 4. |
queueStrategy | "queue" | "shift" | Стратегия поведения при переполнении очереди: • "queue" — новые снекбары ждут, пока освободится место• "shift" — новые снекбары закрывают старые (по умолчанию) |
offsetYStart | string | number | Отступ контейнера со снекбарами от верха страницы. Полезно при использовании FixedLayout. |
offsetYEnd | string | number | Отступ контейнера со снекбарами от низа страницы. Полезно при использовании FixedLayout. |
zIndex | string | number | Значение z-index для контейнера снекбаров. |
Возвращаемое значение
Хук возвращает массив из двух элементов:
snackbarApi— объект с методами для управления снекбарамиsnackbarHolder— React-элемент, который нужно добавить в JSX вашего компонента
API методы
open(config) — открыть снекбар
Показывает новое уведомление. Принимает те же свойства, что и компонент Snackbar (кроме open и offsetY).
Возвращает: объект с методами для управления этим снекбаром (см. OpenReturn).
const result = snackbarApi.open({
children: "Операция выполнена успешно",
action: "Закрыть",
onActionClick: () => console.log("Кнопка нажата"),
});
// Можно сразу закрыть
result.close();openCustom(payload) — открыть кастомный снекбар
Позволяет создать снекбар с собственной разметкой. Подробнее в разделе Пользовательские снекбары.
close(id) — закрыть снекбар
Закрывает снекбар по его идентификатору.
const result = snackbarApi.open({ children: "Уведомление" });
snackbarApi.close(result.id);closeAll() — закрыть все снекбары
Закрывает все открытые снекбары одновременно.
snackbarApi.closeAll();update(id, config) — обновить свойства снекбара
Изменяет свойства уже открытого снекбара. Можно изменить любое свойство, кроме id и placement.
const result = snackbarApi.open({ children: "Старый текст" });
// Позже обновляем содержимое
snackbarApi.update(result.id, {
children: "Новый текст",
action: "ОК",
});setLimit(count) — изменить лимит снекбаров
Меняет максимальное количество одновременно открытых снекбаров.
snackbarApi.setLimit(6); // Теперь можно показать до 6 снекбаровsetQueueStrategy(behavior) — изменить стратегию очереди
Меняет поведение при переполнении очереди: "queue" или "shift".
snackbarApi.setQueueStrategy("queue"); // Новые снекбары будут ждатьsetOffsetYStart(offset) и setOffsetYEnd(offset) — изменить отступы
Изменяют отступы контейнера со снекбарами от краёв страницы.
snackbarApi.setOffsetYStart(60); // Отступ сверху 60px
snackbarApi.setOffsetYEnd(20); // Отступ снизу 20pxsetZIndex(zIndex) — изменить z-index
Меняет значение z-index контейнера снекбаров.
snackbarApi.setZIndex(9999);OpenReturn
Объект, который возвращают методы open и openCustom. Содержит методы для управления конкретным снекбаром.
| Свойство | Тип | Описание |
|---|---|---|
id | string | Уникальный идентификатор снекбара. Генерируется автоматически, если не указан при открытии. |
close() | () => void | Закрывает этот снекбар. |
update(props) | (props) => void | Обновляет свойства снекбара. |
onClose(resolve?) | (resolve?) => Promise | Возвращает Promise, который выполнится, когда снекбар закроется. |
Пример использования onClose:
const result = snackbarApi.open({ children: "Сообщение" });
// Выполнить действие после закрытия
result.onClose().then(() => {
console.log("Снекбар закрыт!");
});Примеры использования
Базовый пример
Управление конкретным снекбаром
Обновление снекбара
Настройка лимита и стратегии очереди
Пользовательские снекбары
Метод openCustom позволяет создать снекбар с собственной разметкой и логикой. Это полезно, когда нужно:
- Передать дополнительные данные в снекбар
- Использовать сложную разметку, которую нельзя описать через
open - Разделить логику вызова снекбара и его отображения
Как это работает
Вместо простого объекта конфигурации вы передаёте React-компонент, который будет рендерить содержимое снекбара. В этот компонент автоматически передаются:
snackbarProps— все свойства для компонентаSnackbarid— идентификатор снекбараclose()— функция для закрытия снекбараupdate(props)— функция для обновления свойств снекбара- ваши дополнительные свойства (если указаны)
Два способа использования
Способ 1: Передать объект с настройками (когда нужны дополнительные свойства)
snackbarApi.openCustom({
component: MySnackbarComponent,
additionalProps: {
userName: "Иван",
},
baseProps: {
// Свойства для Snackbar
action: "ОК",
},
});Способ 2: Передать компонент напрямую (когда дополнительные свойства не нужны)
snackbarApi.openCustom(MySnackbarComponent);Типы
CustomSnackbar.Payload<AdditionalProps> — объект с настройками:
component— React-компонент для рендерингаadditionalProps?— дополнительные свойства для компонентаbaseProps?— базовые свойства дляSnackbarid?— идентификатор (генерируется автоматически, если не указан)
CustomSnackbar.Props<AdditionalProps> — свойства, которые получает ваш компонент:
- Все ваши
AdditionalProps snackbarProps— свойства дляSnackbarid— идентификатор снекбараclose()— закрыть снекбарupdate(props)— обновить свойства
Пример с дополнительными свойствами
Когда нужно передать данные в снекбар (например, имя пользователя):
Пример без дополнительных свойств
Если дополнительные свойства не нужны, можно передать компонент напрямую:
Пример с использованием методов внутри компонента
Внутри кастомного компонента можно использовать методы close() и update():