measure¶
measure позволяет синхронно получать размеры и положение представления на экране в потоке UI thread.
Справочник¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Определения типов
1 2 3 4 5 6 7 8 9 10 11 12 | |
Аргументы¶
animatedRef¶
animated ref, связанный с компонентом, от которого вы хотите получить измерения. Анимированная ссылка должна быть передана либо Анимированному компоненту, либо встроенному компоненту React Native.
Возвращает¶
measure возвращает объект, содержащий такие поля:
xчисло, представляющее координату X относительно родительского компонента,yчисло, представляющее координату Y относительно родительского компонента,width- число, представляющее ширину компонента,height- число, обозначающее высоту компонента,pageX- число, обозначающее координату X относительно экрана,pageY- число, представляющее координату Y относительно экрана,
или возвращает null, если измерение выполнить не удалось.
Пример¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | |
Замечания¶
-
measureреализована только в потоке UI thread. При использованииmeasureвнутри обработчиков событий его необходимо обернуть функциейrunOnUI. -
Функция
useAnimatedStyleсначала оценивается в JavaScript-потоке непосредственно перед присоединением представлений к нативной стороне. Поэтому для безопасного использования меры внутриuseAnimatedStyleнеобходимо добавить в код условие, аналогичное приведенному ниже:1 2 3 4 5 6 7 8 9
function App() { const animatedStyles = useAnimatedStyle(() => { // highlight-next-line if (_WORKLET) { // safely use measure const measurement = measure(animatedRef); } }); }Последовательные запуски
useAnimatedStyleвыполняются в потоке UI. -
Если вам нужны только размеры компонента и вы не будете использовать измерения во время анимации, вместо этого используйте свойство
onLayout. -
Иногда
measureвозвращаетnull(например, когдаrefеще не присоединен к представлению). Для большей безопасности лучше добавить проверкуnullпосле измерения.1 2 3 4 5 6 7 8 9 10 11 12 13 14
const animatedRef = useAnimatedRef(); const handlePress = () => { runOnUI(() => { const measurement = measure(animatedRef); // highlight-start if (measurement === null) { return; } // highlight-end // ... })(); }; -
measureможет использоваться только для рендерных компонентов. Например, попыткаизмеритьвнеэкранные элементы вFlatListвернет значениеnull. -
Функция
measureнедоступна в удаленном JS-отладчике. Мы настоятельно рекомендуем использовать Chrome DevTools (также известный какchrome://inspect) для отладки приложений React Native.
Совместимость с платформами¶
| Android | iOS | Web |
|---|---|---|
| ✅ | ✅ | ✅ |