AdaptivityProvider
Переопределяет базовую адаптивность компонента – глобально или локально. Принимает все доступные параметры адаптивности.
Когда использовать?
- Если вам нужно зафиксировать размер компонента на
compactилиregular(см. Адаптивность | Размеры элементов интерфейса). - Если вам нужно зафиксировать конкретный брейкпоинт на мобильный, планшетный, настольный и т.п. (см. Адаптивность | Размеры экрана).
- Если вам нужно зафиксировать поведение компонента (см. Адаптивность | Наличие точного указателя).
Логика работы
AdaptivityProvider всегда перебивает свой вышестоящий экземпляр – это значит, что свойства не наследуются из контекста.
Говоря о свойствах, по умолчанию они определяются как undefined. Автоматически определение есть только у свойств sizeX и sizeY
при следующих условиях:
- если
sizeXне задан, но заданviewWidth; - если
sizeYне задан, но заданыviewWidthиviewHeightилиviewWidthиhasPointerили толькоviewHeight.
Глобальное переопределение
Оборачиваем в AdaptivityProvider всё приложение.
import { ConfigProvider, AdaptivityProvider, AppRoot, ViewWidth } from '@vkontakte/vkui';
/**
* Зашили верстку и поведение под настольные экраны.
*/
export function AlwaysDesktopWithMouse() {
return (
<ConfigProvider>
<AdaptivityProvider viewWidth={ViewWidth.DESKTOP} hasPointer>
<AppRoot>{/* приложение */}</AppRoot>
</AdaptivityProvider>
</ConfigProvider>
);
}Локальное переопределение
В необходимом месте отдельно оборачиваем компонент или ряд компонентов в AdaptivityProvider.
import { AdaptivityProvider, Button } from '@vkontakte/vkui';
/**
* Зашили высоту кнопки в "regular" размере.
*/
export function ReallyBigButton() {
return (
<AdaptivityProvider sizeY="regular">
<Button size="l">Я действительно большая кнопка</Button>
</AdaptivityProvider>
);
}Хук useAdaptivity
Хук возвращает из контекста свойства, переданные в AdaptivityProvider.
import { AdaptivityProvider, useAdaptivity } from '@vkontakte/vkui';
function AdaptivityPropsByContext() {
const {
sizeX = 'undefined',
sizeY = 'undefined',
viewWidth = 'undefined',
viewHeight = 'undefined',
hasPointer = 'undefined',
} = useAdaptivity();
return (
<pre>
sizeX: {sizeX}, sizeY: {sizeY}, viewWidth: {viewWidth}, viewHeight: {viewHeight}, hasPointer:{' '}
{hasPointer}
</pre>
);
}
// На странице увидим такой вывод
//
// sizeX: compact, sizeY: undefined, viewWidth: undefined, viewHeight: undefined, hasPointer: undefined
export function App() {
return (
<AdaptivityProvider sizeX="compact">
<AdaptivityPropsByContext />
</AdaptivityProvider>
);
}Свойства и методы
AdaptivityProvider
| Свойство | Описание |
|---|---|
hasHover | booleanDeprecated: Since 7.3.0. Свойство нигде не используется и будет удалено в По умолчанию: - |
hasPointer | booleanФлаг наличия указателя (например, мыши) на устройстве. По умолчанию: - |
sizeX | SizeTypeValuesТип размера экрана по горизонтали. По умолчанию: - |
sizeY | SizeTypeValuesТип размера экрана по вертикали. По умолчанию: - |
viewHeight | numberТип высоты экрана для адаптивного отображения. По умолчанию: - |
viewWidth | ViewWidthTypeТип ширины экрана для адаптивного отображения. По умолчанию: - |
useAdaptivity
Не принимает свойств