Гид по технологиям

Создание кастомных уведомлений в React с SweetAlert

6 min read Frontend Обновлено 09 Jan 2026
SweetAlert в React: кастомные уведомления
SweetAlert в React: кастомные уведомления

TL;DR

SweetAlert позволяет быстро добавлять кастомные модальные уведомления в React-приложение через функцию swal. Уведомления можно задавать простыми параметрами, объектом с опциями, вставлять HTML-элементы, настраивать кнопки, стиль и поведение закрытия. Используйте SweetAlert для быстрых, доступных всплывающих модалей; для потоковых тостов рассмотрите React-Toastify.

MacBook Air на столе, показывающий рабочий стол с уведомлениями и руку на клавиатуре

SweetAlert — популярная библиотека для создания кастомных уведомлений и модальных окон в веб‑приложениях. В React её часто используют для простых оповещений, подтверждений, ввода данных и сообщений об ошибках. Правильная настройка уведомлений улучшает UX: пользователю ясно, что произошло, и какие действия доступны.

Основная идея

swal — функция, которая рендерит модальное уведомление. Её можно вызывать тремя простыми параметрами (title, text, icon) или передать объект с подробными опциями. Это даёт быстрый контроль и одновременно простоту использования.

Установка SweetAlert

Установите библиотеку через npm или предпочитаемый пакетный менеджер. Команда для npm:

npm install sweetalert --save

После установки импортируйте swal в компонент и используйте по необходимости.

Быстрый пример использования

Простейший пример — вызвать swal с заголовком. Код остаётся лёгким для чтения и тестирования:

import React from 'react'
import swal from 'sweetalert'

function App() {

  const notify = () => swal('Hello There')

  return (
    
) } export default App

При клике появится модальное окно с текстом «Hello There».

SweetAlert с сообщением

Параметры функции swal

swal может принимать:

  • первые три параметра: title (заголовок), text (сообщение), icon (иконка);
  • или один объект с полным набором опций.

Доступные значения для icon: success, warning, error, info. Иконка подбирается автоматически на основе этого значения.

Пример с тремя параметрами:

import React from 'react'
import swal from 'sweetalert'

function App() {

  const notify = () => swal('Hello There', 'Welcome to my Page', 'success')

  return (
    
) } export default App

SweetAlert с иконкой успеха

Использование объекта опций

Объектный синтаксис даёт полный контроль над содержимым и поведением уведомления:

import React from 'react'
import swal from 'sweetalert'

function App() {

  const notify = () => swal(
    {
      title: 'Hello There',
      text: 'Welcome to my Page',
      icon: 'success',
      button: 'OK',
    }
  )

  return (
    
) } export default App

В объекте опций можно задавать: title, text, icon, button, buttons, className, content, timer, closeOnEsc, closeOnClickOutside и другие поля.

Настройка кнопки

По умолчанию кнопка выглядит так:

swal(
    {
    button: {
       text: "OK",
       value: true,
       visible: true,
       className: "",
       closeModal: true
    },
    }
  );

Пояснения к полям:

  • text — текст на кнопке.
  • value — возвращаемое значение при клике (обычно true или особая метка).
  • visible — показывать ли кнопку.
  • className — CSS‑класс для стилизации.
  • closeModal — закрывать ли модальное окно по клику.

Массив buttons позволяет отрисовать несколько кнопок:

swal(
    {
     buttons: ["Cancel", "Ok"],
    }
  );

Установка buttons в false уберёт все кнопки и сделает модаль только информационной.

Вставка HTML‑элементов в контент

Можно отрисовать внутри модального окна HTML‑элемент, например input, select или кастомный узел:

import React from 'react'
import swal from 'sweetalert'

function App() {

  const notify = () => swal(
    {
      content: {
        element: 'input',
        attributes: {
          placeholder: 'First Name',
          type: 'text'
        }
      },
      buttons: 'Sign Up'
    }
  )

  return (
    
) } export default App

Поле content описывает элемент и его attributes. Это удобно для быстрых форм и подтверждений.

Поле ввода имени в SweetAlert с кнопкой регистрации

Стилизация уведомления

Используйте опцию className, чтобы применить свои CSS‑правила к модальному окну:

swal(
    {
      title: 'Hello There',
      text: 'Welcome to my Page',
      button: false,
      className: 'alert',
    }
  )

Пример стилей:

.alert{
  background-color: green;
  font-family: cursive;
  border-radius: 15px;
}

SweetAlert со зелёной стилизацией и закруглениями

Советы по стилю:

  • Избегайте перегруженного дизайна в модалях. Простая визуальная иерархия лучше для скорости восприятия.
  • Добавляйте фокусные стили для клавиатурной навигации и тестируйте читаемость контрастов.

Поведение закрытия

У SweetAlert несколько опций для контроля закрытия:

  • closeOnEsc — закрывать по клавише Esc (по умолчанию true).
  • closeOnClickOutside — закрывать кликом вне модального окна (по умолчанию true).
  • timer — автоматически закрыть через миллисекунды.

Примеры:

swal(
    {
      ...,
      closeOnEsc: false,
    }
  )
swal(
    {
      ...,
      closeOnClickOutside: false,
    }
  )
swal(
    {
      ...,
      timer: 5000,
    }
  )

При timer: 5000 уведомление будет видно 5 секунд.

Доступность (A11y) и безопасность

  • Убедитесь, что фокус перемещается в модальное окно и возвращается после закрытия. Это важно для пользователей клавиатуры.
  • Для элементов ввода задавайте aria‑метки и роли: role=”dialog”, aria-labelledby и aria-describedby.
  • Не подставляйте непроверенный HTML в текст уведомления — избегайте XSS. Если используете вставку HTML, строго фильтруйте источник.

Когда SweetAlert подходит, а когда нет

Когда использовать SweetAlert:

  • Нужны модальные окна подтверждения или информирования с простой логикой.
  • Хочется быстро получить консистентный UI без большого объёма кода.
  • Требуется встроить маленькую форму (input/select) в модальное окно.

Когда лучше выбрать альтернативу:

  • Нужны массовые уведомления в углу экрана (toast) с очередью и управлением — лучше React‑Toastify или Notistack.
  • Требуется сложная логика взаимодействия с множеством внутренних состояний — используйте кастомное модальное решение.

Альтернативы и сравнение

Короткая матрица сравнения (плюсы / минусы):

  • SweetAlert

    • Плюсы: простой API, быстро настроить, встроенные иконки.
    • Минусы: не предназначен для потоковых тостов; ограниченная кастомизация в сложных сценариях.
  • React-Toastify

    • Плюсы: отличен для toast‑уведомлений, очереди, позиционирования, кастомной анимации.
    • Минусы: требует отдельной настройки для модальных подтверждений.
  • Notistack

    • Плюсы: хорошо интегрируется с Material UI, поддерживает стек уведомлений.
    • Минусы: зависит от MUI, если вы не используете MUI, лишний вес.

Выбор зависит от UX‑требований: для модалей — SweetAlert; для toast‑уведомлений — Toastify.

Практическое руководство: шаблон использования в проекте

Мини‑SOP для разработчика:

  1. Установить библиотеку: npm install sweetalert.
  2. Создать утилиту notify.js, оборачивающую swal и задающую стандартные опции (например, таймауты, кнопки по умолчанию).
  3. Вызовы в приложении делать через эту утилиту — централизованно контролировать стиль и поведение.
  4. Добавлять unit/integ‑тесты для критичных UX‑флоу (подтверждение удаления, авторизация).

Пример обёртки notify.js:

import swal from 'sweetalert'

export function notifySuccess(title, text) {
  return swal({ title, text, icon: 'success', timer: 3000, buttons: false })
}

export function confirmAction(title, text) {
  return swal({ title, text, icon: 'warning', buttons: ['Cancel', 'Confirm'] })
}

Использование в компоненте:

import { notifySuccess, confirmAction } from './notify'

// ...
notifySuccess('Saved', 'Ваши изменения сохранены')

const result = await confirmAction('Удалить запись?', 'Это действие необратимо')
if (result) {
  // удалить
}

Чек‑лист по ролям

  • Для разработчика:

    • Создать обёртку над swal.
    • Покрыть критичные сценарии тестами.
    • Проверить фокус и aria‑атрибуты.
  • Для дизайнера:

    • Утвердить варианты иконок и тексты для success/error/warning/info.
    • Предложить классы для типовых модалей (alert, confirm, form).
  • Для продуктового менеджера:

    • Определить, какие действия требуют подтверждения (например, удаление).
    • Решить, нужны ли автоматические таймеры для информационных уведомлений.

Мини‑шпаргалка (cheat sheet)

  • swal(‘Title’) — простое уведомление.
  • swal(‘T’, ‘M’, ‘success’) — заголовок/текст/иконка.
  • swal({ title, text, icon, button }) — опции объектом.
  • content: { element: ‘input’, attributes: { placeholder: ‘…’ } } — вставка input.
  • buttons: [“Cancel”, “Ok”] — несколько кнопок.
  • timer: 5000 — авто‑закрытие через 5 с.

Когда SweetAlert может не подойти

  • В приложении есть поток уведомлений (ошибки, подсказки, обновления) — нужен toast‑менеджер.
  • Нужна полная кастомизация анимаций и позиций уведомлений — стоит выбрать библиотеку с более гибкой системой рендеринга.

Примеры крайних случаев и их решения

  • Кейс: нужно одно и то же уведомление на нескольких страницах с одинаковым стилем. Решение: централизовать вызов через notify‑утилиту.
  • Кейс: модальное окно теряет фокус на мобильных устройствах. Решение: управлять фокусом вручную и тестировать на эмуляторах.
  • Кейс: пользовательский ввод требует валидации. Решение: не применять swal как замену полноценных форм; лучше открыть полноценный компонент формы.

Частые вопросы

Как изменить текст кнопки по локали?

Передавайте в поле button или buttons локализованные строки из i18n‑слоя вашего приложения.

Можно ли использовать SweetAlert вместе с React‑порталами?

SweetAlert сам рендерит модальное окно в body. Это безопасно и обычно не конфликтует с React‑порталами, но важно правильно управлять фокусом.

Можно ли тестировать swal в unit‑тестах?

Да. Вы можете мокировать swal и проверять вызовы с нужными параметрами. Для интеграционных тестов проверяйте DOM после открытия модали.

FAQ — развернутые ответы

Вопрос: Повлияет ли swal на историю браузера?
Ответ: Нет. SweetAlert не меняет URL и не добавляет записи в историю.

Вопрос: Можно ли разместить несколько модалей одновременно?
Ответ: По умолчанию рекомендуется показывать одну модаль. Параллельные модальные окна усложняют UX и управление фокусом.

Резюме

SweetAlert — удобный инструмент для быстрых модальных уведомлений в React. Он прост в интеграции и даёт базовый набор опций для текста, иконок, кнопок и встроенного контента. Для массовых уведомлений или сложных форм стоит комбинировать SweetAlert с другими библиотеками или строить централизованную обёртку вокруг swal. Централизуйте конфигурацию, тестируйте фокус и доступность, и выбирайте инструмент под задачу.


Если нужно, я могу подготовить готовую утилиту notify.js с учётом локализации и доступности, либо сравнить SweetAlert с React‑Toastify по конкретным требованиям вашего приложения.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство