Метод forceUpdate является одним из ключевых
инструментов управления позиционированием элементов в библиотеке
Popper.js. Он обеспечивает немедленное пересчитывание и
обновление позиции всплывающих элементов, таких как тултипы, выпадающие
меню или модальные подсказки. В отличие от метода update,
который возвращает промис и выполняет обновление
асинхронно, forceUpdate работает
синхронно, мгновенно отражая изменения в DOM.
const popperInstance = Popper.createPopper(referenceElement, popperElement, {
placement: 'bottom',
});
popperInstance.forceUpdate();
referenceElement — элемент, относительно которого
позиционируется всплывающий блок.popperElement — сам всплывающий элемент.placement — предпочтительное место расположения
(top, bottom, left,
right и их варианты с -start /
-end).Вызов forceUpdate() сразу инициирует пересчёт всех
координат и применяет новые значения к popperElement.
updateupdate: асинхронный метод, возвращает
промис, полезен, когда нужно дождаться завершения
расчётов.forceUpdate: синхронный, не возвращает
промис, выполняет перерасчёт мгновенно.Использование forceUpdate оправдано, когда требуется
немедленно отреагировать на изменение размеров, позиции или содержимого
элементов, не дожидаясь следующего цикла рендеринга.
const popperInstance = Popper.createPopper(referenceElement, popperElement);
referenceElement.addEventListener('click', () => {
popperElement.textContent = 'Новый текст, изменяющий размеры';
popperInstance.forceUpdate();
});
При изменении содержимого всплывающего элемента без вызова
forceUpdate положение поппера может остаться
неправильным.
window.addEventListener('resize', () => {
popperInstance.forceUpdate();
});
Даёт мгновенную реакцию на изменение размеров окна, без ожидания
событий scroll или других триггеров.
const popperInstance = Popper.createPopper(referenceElement, popperElement, {
modifiers: [
{
name: 'offset',
options: {
offset: [0, 10],
},
},
{
name: 'preventOverflow',
options: {
boundary: 'viewport',
},
},
],
});
popperInstance.forceUpdate();
Метод учитывает все активные модификаторы, мгновенно пересчитывая итоговые координаты. Это особенно важно при динамическом включении или изменении модификаторов.
forceUpdate
получает размеры и позицию referenceElement и
popperElement, а также их CSS-свойства.placement и модификаторов вычисляются новые координаты для
всплывающего элемента.transform и top/left свойства
popperElement, мгновенно обновляя его видимую позицию.await popperInstance.forceUpdate().forceUpdate игнорирует оптимизации асинхронного
обновления, которые выполняет update.scroll, чтобы избежать
перегрузки рендеринга.flip и
preventOverflow обеспечивает мгновенное и корректное
перераспределение позиции при динамических изменениях интерфейса.Метод forceUpdate — это мощный инструмент для
синхронного контроля позиции попперов. Он незаменим в
ситуациях, когда необходимо немедленно отобразить изменения без ожидания
асинхронного обновления, особенно при динамических интерфейсах и сложных
взаимодействиях с пользователем.