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 |
---|---|---|
✅ | ✅ | ✅ |