Floating UI — это библиотека для построения плавающих интерфейсов, таких как тултипы, поповеры, дропдауны и меню. Со временем API библиотеки развивается, и некоторые функции становятся устаревшими (deprecated). Понимание того, какие методы и опции больше не поддерживаются, критично для поддержки кода и предотвращения ошибок при обновлении версии библиотеки.
Ранние версии Floating UI предоставляли методы позиционирования через
computePosition с устаревшими опциями,
которые сейчас заменены более гибкими middleware.
Примеры deprecated опций:
flip: { fallbackPlacements: [...] } — ранее
использовалась для автоматического изменения позиции, если основной
placement не помещался. Сейчас предпочтительно использовать middleware
flip() с отдельной конфигурацией.offset: number — прямое указание отступа между
reference и floating элементом больше не рекомендуется; вместо этого
применяется middleware offset() с явным указанием сдвига по
оси X/Y.Рекомендуемая замена:
import { computePosition, offset, flip } from '@floating-ui/dom';
computePosition(reference, floating, {
middleware: [
offset(8), // отступ 8px
flip({ fallbackPlacements: ['top', 'right'] }),
],
});
В предыдущих версиях библиотека предоставляла методы вроде
autoUpdate() и autoPlacement, которые имели
ограниченную конфигурацию:
autoUpdate(reference, floating, callback) —
автоматически следил за изменениями размеров и скролла.
Deprecated: теперь рекомендуется использовать
autoUpdate из
@floating-ui/dom с явным управлением подписками и отменой
наблюдателей.Современный пример:
import { autoUpdate } from '@floating-ui/dom';
const cleanup = autoUpdate(reference, floating, () => {
computePosition(reference, floating, {
middleware: [offset(10), flip()],
}).then(({ x, y }) => {
Object.assign(floating.style, {
left: `${x}px`,
top: `${y}px`,
});
});
});
// Для отмены наблюдения
cleanup();
Некоторые middleware полностью устарели и заменены более универсальными решениями:
shift (старый синтаксис) → теперь используется
shift() с объектной конфигурацией
{ limiter: ... }.arrow с устаревшей логикой смещения → заменён
middleware arrow() с поддержкой современных API для позиции
стрелки.Пример обновлённого middleware для стрелки:
import { arrow } from '@floating-ui/dom';
const arrowElement = document.querySelector('.arrow');
computePosition(reference, floating, {
middleware: [
arrow({ element: arrowElement }),
flip(),
],
}).then(({ x, y, middlewareData }) => {
Object.assign(arrowElement.style, {
left: `${middlewareData.arrow.x}px`,
top: `${middlewareData.arrow.y}px`,
});
});
Для React раньше существовали хелперы вроде useFloating
с устаревшими опциями placementStrategy и
middlewareData напрямую в стейте.
Теперь рекомендуется использовать новый API:
strategy — заменяет устаревшие
placementStrategy.middleware без
прямой модификации middlewareData.whileElementsMounted вместо прямого autoUpdate
в хук-рендере.Пример React-хука:
import { useFloating, offset, flip, arrow } from '@floating-ui/react';
const { x, y, reference, floating, strategy, middlewareData } = useFloating({
placement: 'bottom',
middleware: [
offset(10),
flip(),
arrow({ element: arrowRef }),
],
});
Floating UI придерживается строгой политики: устаревшие методы помечаются как deprecated, но не удаляются сразу. Это позволяет:
При обновлении версии библиотеки следует проверять:
flip, offset,
shift через устаревшие синтаксисы нужно переписать через
новые middleware.useFloating с middleware и
whileElementsMounted.arrow({ element })
вместо ручного расчёта.Устранение deprecated кода повышает стабильность, совместимость и производительность приложений, использующих Floating UI.