В библиотеке Tippy.js хук
onBeforeUpdate выполняет ключевую роль при управлении
жизненным циклом всплывающих подсказок. Этот хук вызывается
непосредственно перед обновлением конфигурации тултипа,
позволяя динамически изменять параметры или выполнять действия до того,
как изменения вступят в силу.
Функция хука имеет следующую форму:
onBeforeUpdate(instance, partialProps) => void
TippyInstance), через который доступны методы управления,
текущее состояние и элементы DOM.onBeforeUpdate позволяет изменять параметры тултипа в
реальном времени, например, менять содержимое, позицию или анимацию в
зависимости от внешних условий:tippy('#button', {
content: 'Начальное сообщение',
onBeforeUpdate(instance, partialProps) {
if (instance.state.isVisible) {
partialProps.content = 'Обновлённое сообщение';
}
}
});
tippy('#button', {
content: 'Текст',
onBeforeUpdate(instance, partialProps) {
if (!partialProps.content) {
partialProps.content = instance.props.content; // оставляем старое значение
}
}
});
tippy('#button', {
onBeforeUpdate(instance, partialProps) {
console.log('Перед обновлением:', partialProps);
}
});
onUpdate выполняется после
применения изменений, тогда как onBeforeUpdate —
до. Это позволяет подготовить конфигурацию и предотвратить нежелательные
эффекты до обновления DOM.
onShow / onMount не
вызываются при изменении свойств, если тултип уже отображён.
onBeforeUpdate даёт возможность реагировать на любые
изменения вне зависимости от состояния видимости.
onBeforeUpdate
позволяет обновлять опцию placement:tippy('#button', {
content: 'Короткий текст',
placement: 'top',
onBeforeUpdate(instance, partialProps) {
if (partialProps.content.length > 20) {
partialProps.placement = 'bottom';
}
}
});
tippy('#button', {
onBeforeUpdate(instance, partialProps) {
if (instance.state.isVisible) {
partialProps.animation = 'shift-away';
}
}
});
tippy('#button', {
onBeforeUpdate(instance, partialProps) {
partialProps.content = fetchLatestTooltipText();
}
});
partialProps напрямую —
основной способ управлять поведением тултипа. Необходимо помнить, что
любые изменения применяются мгновенно при следующем обновлении.onBeforeUpdate срабатывает только тогда, когда тултип уже
создан и получает новые параметры через
instance.setProps().instance.state позволяет делать более точные и безопасные
обновления.const button = document.querySelector('#button');
const tip = tippy(button, {
content: 'Первоначальный текст',
placement: 'top',
onBeforeUpdate(instance, partialProps) {
if (partialProps.content.includes('ошибка')) {
partialProps.theme = 'error';
partialProps.placement = 'bottom';
} else {
partialProps.theme = 'light';
}
}
});
// Позже обновляем содержимое тултипа
tip.setProps({ content: 'Произошла ошибка при загрузке' });
В этом примере тултип автоматически меняет тему и позицию, реагируя на изменение текста до того, как обновление произойдёт.
Хук onBeforeUpdate является мощным инструментом для
гибкого управления динамическими изменениями в
Tippy.js, обеспечивая контроль над поведением и внешним видом тултипов
на уровне конфигурации перед их обновлением.