Для работы с Shepherd.js в React необходимо установить библиотеку и её зависимости. Основная команда для установки через npm:
npm install shepherd.js
Shepherd.js требует наличие CSS-стилей, которые обеспечивают корректное отображение подсказок и навигационных элементов тура. Их можно подключить в корневом компоненте React:
import 'shepherd.js/dist/css/shepherd.css';
После подключения CSS и установки библиотеки можно импортировать Shepherd в компонент:
import Shepherd from 'shepherd.js';
Для организации тура создаётся экземпляр класса
Shepherd.Tour. В конструкторе можно определить глобальные
настройки для всех шагов:
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: {
enabled: true
},
scrollTo: { beh * avior: 'smooth', block: 'center' },
classes: 'shepherd-theme-arrows'
},
useModalOverlay: true
});
Ключевые параметры:
defaultStepOptions – настройки для всех шагов тура по
умолчанию. Позволяет задать стиль, поведение кнопок и автоматическую
прокрутку.useModalOverlay – затемняет фон вокруг текущего шага,
делая внимание пользователя сосредоточенным на подсказке.Шаги добавляются методом addStep, каждый шаг описывает
элемент DOM, к которому привязывается подсказка, текст, кнопки
управления и расположение:
tour.addStep({
id: 'intro-step',
text: 'Это первый шаг вашего тура.',
attachTo: {
element: '.intro-button',
on: 'bottom'
},
buttons: [
{
text: 'Далее',
action: tour.next
}
]
});
tour.addStep({
id: 'feature-step',
text: 'Здесь отображается основная функциональность.',
attachTo: {
element: '.feature-panel',
on: 'right'
},
buttons: [
{
text: 'Назад',
action: tour.back
},
{
text: 'Закрыть',
action: tour.cancel
}
]
});
Особенности attachTo:
element – CSS-селектор или DOM-узел, к которому
привязывается подсказка.on – позиция подсказки относительно элемента
(top, bottom, left,
right).viewport – можно управлять поведением подсказки при
выходе за пределы видимой области.Для использования Shepherd.js в React рекомендуется создавать кастомный хук или компонент-обёртку. Это обеспечивает корректное управление жизненным циклом тура.
Пример компонента React, инициирующего тур после монтирования:
import React, { useEffect } from 'react';
import Shepherd from 'shepherd.js';
import 'shepherd.js/dist/css/shepherd.css';
const TourComponent = () => {
useEffect(() => {
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: { enabled: true },
scrollTo: { beh * avior: 'smooth', block: 'center' },
classes: 'shepherd-theme-arrows'
},
useModalOverlay: true
});
tour.addStep({
id: 'welcome',
text: 'Добро пожаловать в приложение!',
attachTo: { element: '.welcome', on: 'bottom' },
buttons: [{ text: 'Начать', action: tour.next }]
});
tour.addStep({
id: 'feature',
text: 'Обратите внимание на этот функциональный блок.',
attachTo: { element: '.feature', on: 'right' },
buttons: [
{ text: 'Назад', action: tour.back },
{ text: 'Закрыть', action: tour.cancel }
]
});
tour.start();
return () => tour.cancel();
}, []);
return null;
};
export default TourComponent;
Обратите внимание:
useEffect, чтобы гарантировать
наличие всех DOM-элементов.tour.cancel() обеспечивает корректное
удаление всех подсказок при размонтировании компонента, предотвращая
утечки памяти.Каждая кнопка шага может иметь собственное действие:
tour.next() – переход к следующему шагу.tour.back() – возврат к предыдущему шагу.tour.cancel() – немедленное завершение тура.buttons: [
{
text: 'Сохранить и продолжить',
action: () => {
console.log('Данные сохранены');
tour.next();
}
}
]
Shepherd.js позволяет изменять стиль подсказок через классы и темы. Включены стандартные темы:
shepherd-theme-arrows – стрелки на подсказках.shepherd-theme-default – минималистичный стиль.shepherd-theme-dark – тёмная тема.Класс можно задать глобально через
defaultStepOptions.classes или для отдельного шага:
tour.addStep({
id: 'custom-step',
text: 'Пользовательская подсказка',
attachTo: { element: '.custom-element', on: 'top' },
classes: 'shepherd-theme-dark'
});
В React компоненты могут появляться и исчезать. Для корректной работы туров:
attachTo.useEffect(() => {
const checkElement = setInterval(() => {
const element = document.querySelector('.dynamic-element');
if (element) {
tour.start();
clearInterval(checkElement);
}
}, 100);
return () => clearInterval(checkElement);
}, []);
Shepherd.js предоставляет события, на которые можно подписываться
через метод on:
start – тур запущен.complete – тур завершён.cancel – тур отменён.show – шаг отображён.hide – шаг скрыт.Пример подписки:
tour.on('complete', () => {
console.log('Тур успешно завершён');
});
tour.on('show', (event) => {
console.log('Показан шаг:', event.step.id);
});
Эти события позволяют интегрировать тур с аналитикой или выполнять дополнительные действия в приложении.
Опция useModalOverlay создаёт затемнённый фон и
предотвращает взаимодействие пользователя с остальной частью страницы.
Для улучшения UX можно управлять фокусом:
tour.addStep({
id: 'focus-step',
text: 'Этот элемент важен',
attachTo: { element: '.focus-element', on: 'right' },
buttons: [{ text: 'Далее', action: tour.next }],
canClickTarget: false
});
canClickTarget: false блокирует клики на элементе во
время шага.scrollTo обеспечивает плавную прокрутку и
центрирование элемента.Этот подход позволяет создавать полностью настраиваемые, интерактивные туры в React-приложениях с динамическим контентом, плавной навигацией, кастомными кнопками и разнообразными стилями подсказок.