Для использования Tippy.js в React применяется
официальная обертка @tippyjs/react. Она предоставляет
компонент <Tippy> для создания тултипов без
необходимости напрямую управлять DOM-элементами и жизненным циклом
компонентов. Основное преимущество — реактивное управление через props и
JSX.
import React from "react";
import Tippy from "@tippyjs/react";
import 'tippy.js/dist/tippy.css'; // подключение базовых стилей
function App() {
return (
<Tippy content="Привет, мир!">
<button>Наведи на меня</button>
</Tippy>
);
}
В этом примере content задает текст тултипа, а дочерний
элемент (<button>) является триггером. Tippy
автоматически добавляет обработчики событий для отображения тултипа при
наведении.
<Tippy>"top", "bottom",
"left", "right" и их варианты с
-start и -end."mouseenter focus", "click",
"manual" и др.true, тултип
реагирует на взаимодействие пользователя (например, клик внутри
тултипа)."fade", "scale", "shift-away" и
другие.[show, hide].Пример с кастомизацией и анимацией:
<Tippy
content={<span>Сложное содержимое</span>}
placement="right"
animation="scale"
delay={[100, 200]}
theme="light"
>
<button>Кликни меня</button>
</Tippy>
Для динамического управления используется реф. В React можно получать доступ к экземпляру Tippy и программно управлять его поведением:
import React, { useRef } from "react";
import Tippy from "@tippyjs/react";
function ControlledTooltip() {
const tippyRef = useRef();
return (
<div>
<Tippy
content="Управляемый тултип"
visible={false}
onCre ate={instance => tippyRef.current = instance}
>
<button>Наведи или кликни</button>
</Tippy>
<button onCl ick={() => tippyRef.current.show()}>Показать тултип</button>
<button onCl ick={() => tippyRef.current.hide()}>Скрыть тултип</button>
</div>
);
}
Использование onCreate позволяет сохранить ссылку на
Tippy-экземпляр и управлять методами show(),
hide(), hide() с задержкой или кастомными
эффектами.
Tippy.js поддерживает сложные JSX-компоненты внутри
content, что позволяет создавать интерактивные тултипы:
<Tippy
content={
<div style={{ padding: '10px', maxWidth: '200px' }}>
<strong>Заголовок</strong>
<p>Подробное описание тултипа с HTML и стилями.</p>
<button onCl ick={() => alert("Кнопка нажата")}>Нажми</button>
</div>
}
interactive={true}
placement="bottom"
>
<button>Сложный тултип</button>
</Tippy>
Параметр interactive={true} предотвращает мгновенное
скрытие тултипа при наведении мыши на его содержимое.
Для реактивного обновления содержимого можно использовать состояние:
import React, { useState } from "react";
import Tippy from "@tippyjs/react";
function DynamicTooltip() {
const [count, setCount] = useState(0);
return (
<Tippy content={`Кликнули ${count} раз`}>
<button onCl ick={() => setCount(count + 1)}>Нажми меня</button>
</Tippy>
);
}
Tippy автоматически обновляет тултип при изменении props, что делает его идеальным для реактивного интерфейса.
Tippy.js позволяет создавать собственные темы с помощью CSS переменных:
.tippy-box[data-theme~='custom'] {
background-color: #333;
color: #fff;
border-radius: 8px;
font-size: 14px;
padding: 8px 12px;
}
Применение темы:
<Tippy content="Тема кастом" theme="custom">
<button>Тултип с кастомной темой</button>
</Tippy>
Можно комбинировать темы и анимации для создания уникального визуального стиля интерфейса.
useTippy позволяет управлять тултипами вне JSX, что
удобно для динамически создаваемых элементов:
import { useTippy } from "@tippyjs/react";
function HookTooltip() {
const [tippy, setReference] = useTippy({ content: "Хук тултип" });
return <button ref={setReference}>Наведи меня</button>;
}
Этот подход эффективен при работе с библиотеками управления DOM,
когда компонент не рендерит <Tippy> напрямую.
Tippy.js основан на Popper.js, поэтому можно использовать все его
возможности: смещения, сдвиги, коллизии, ограничение области
отображения. Пример с настройкой popperOptions:
<Tippy
content="Сдвинутый тултип"
popperOptions={{
modifiers: [
{ name: 'offset', options: { offset: [0, 20] } },
{ name: 'preventOverflow', options: { boundary: 'viewport' } }
]
}}
>
<button>Попробуй смещение</button>
</Tippy>
Использование Popper.js модификаторов позволяет точно контролировать позиционирование и поведение тултипа в сложных интерфейсах.
Tippy.js поддерживает ленивое создание тултипов с помощью
lazy и render:
<Tippy
render={attrs => (
<div {...attrs} style={{ padding: '5px', backgroundColor: '#555', color: '#fff' }}>
Ленивый контент
</div>
)}
lazy={true}
>
<button>Ленивая загрузка</button>
</Tippy>
Это уменьшает нагрузку на DOM при большом количестве элементов с тултипами, создавая их только при необходимости.