useSnackbarManager

Хук для управления уведомлениями (снекбарами) в приложении. Позволяет показывать, обновлять и закрывать уведомления программно из любого места в коде.

Связанные компоненты:

Хук возвращает два значения: API для управления снекбарами и компонент, который нужно добавить в разметку.

const [snackbarApi, snackbarHolder] = useSnackbarManager();
 
// Показать уведомление
snackbarApi.open({
  children: "Привет, мир!",
});
 
// Не забудьте добавить holder в JSX
return (
  <>
    {/* Ваш контент */}
    {snackbarHolder}
  </>
);

Все параметры опциональны. Хук можно вызвать без аргументов: useSnackbarManager().

ПараметрТипОписание
limitnumberМаксимальное количество одновременно открытых снекбаров на одном placement. По умолчанию: 4.
queueStrategy"queue" | "shift"Стратегия поведения при переполнении очереди:
"queue" — новые снекбары ждут, пока освободится место
"shift" — новые снекбары закрывают старые (по умолчанию)
offsetYStartstring | numberОтступ контейнера со снекбарами от верха страницы. Полезно при использовании FixedLayout.
offsetYEndstring | numberОтступ контейнера со снекбарами от низа страницы. Полезно при использовании FixedLayout.
zIndexstring | numberЗначение z-index для контейнера снекбаров.

Хук возвращает массив из двух элементов:

  1. snackbarApi — объект с методами для управления снекбарами
  2. snackbarHolder — React-элемент, который нужно добавить в JSX вашего компонента

Показывает новое уведомление. Принимает те же свойства, что и компонент Snackbar (кроме open и offsetY).

Возвращает: объект с методами для управления этим снекбаром (см. OpenReturn).

const result = snackbarApi.open({
  children: "Операция выполнена успешно",
  action: "Закрыть",
  onActionClick: () => console.log("Кнопка нажата"),
});
 
// Можно сразу закрыть
result.close();

Позволяет создать снекбар с собственной разметкой. Подробнее в разделе Пользовательские снекбары.

Закрывает снекбар по его идентификатору.

const result = snackbarApi.open({ children: "Уведомление" });
snackbarApi.close(result.id);

Закрывает все открытые снекбары одновременно.

snackbarApi.closeAll();

Изменяет свойства уже открытого снекбара. Можно изменить любое свойство, кроме id и placement.

const result = snackbarApi.open({ children: "Старый текст" });
 
// Позже обновляем содержимое
snackbarApi.update(result.id, {
  children: "Новый текст",
  action: "ОК",
});

Меняет максимальное количество одновременно открытых снекбаров.

snackbarApi.setLimit(6); // Теперь можно показать до 6 снекбаров

Меняет поведение при переполнении очереди: "queue" или "shift".

snackbarApi.setQueueStrategy("queue"); // Новые снекбары будут ждать

Изменяют отступы контейнера со снекбарами от краёв страницы.

snackbarApi.setOffsetYStart(60); // Отступ сверху 60px
snackbarApi.setOffsetYEnd(20); // Отступ снизу 20px

Меняет значение z-index контейнера снекбаров.

snackbarApi.setZIndex(9999);

Объект, который возвращают методы open и openCustom. Содержит методы для управления конкретным снекбаром.

СвойствоТипОписание
idstringУникальный идентификатор снекбара. Генерируется автоматически, если не указан при открытии.
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 — все свойства для компонента Snackbar
  • id — идентификатор снекбара
  • close() — функция для закрытия снекбара
  • update(props) — функция для обновления свойств снекбара
  • ваши дополнительные свойства (если указаны)

Способ 1: Передать объект с настройками (когда нужны дополнительные свойства)

snackbarApi.openCustom({
  component: MySnackbarComponent,
  additionalProps: {
    userName: "Иван",
  },
  baseProps: {
    // Свойства для Snackbar
    action: "ОК",
  },
});

Способ 2: Передать компонент напрямую (когда дополнительные свойства не нужны)

snackbarApi.openCustom(MySnackbarComponent);

CustomSnackbar.Payload<AdditionalProps> — объект с настройками:

  • component — React-компонент для рендеринга
  • additionalProps? — дополнительные свойства для компонента
  • baseProps? — базовые свойства для Snackbar
  • id? — идентификатор (генерируется автоматически, если не указан)

CustomSnackbar.Props<AdditionalProps> — свойства, которые получает ваш компонент:

  • Все ваши AdditionalProps
  • snackbarProps — свойства для Snackbar
  • id — идентификатор снекбара
  • close() — закрыть снекбар
  • update(props) — обновить свойства

Когда нужно передать данные в снекбар (например, имя пользователя):

Загружается...

Если дополнительные свойства не нужны, можно передать компонент напрямую:

Загружается...

Внутри кастомного компонента можно использовать методы close() и update():

Загружается...