useAnimatedStyle¶
useAnimatedStyle
позволяет создать объект стилей, аналогичный стилям StyleSheet
, который может быть анимирован с помощью shared values.
Стили, определенные с помощью useAnimatedStyle
, должны быть переданы в свойство style
компонента Animated. Стили автоматически обновляются при изменении связанного с ними общего значения или состояния React.
Для анимирования свойств вместо этого используйте useAnimatedProps
.
Описание¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Типизация
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Аргументы¶
updater
¶
Функция, возвращающая объект со свойствами стиля, которые необходимо анимировать. Вы можете анимировать любое свойство стиля, доступное в React Native.
dependencies
¶
Необязательный массив зависимостей.
Актуально только при использовании Reanimated без плагина Babel в Web.
Возвращает¶
useAnimatedStyle
возвращает объект анимированного стиля, который должен быть передан в свойство style
компонента Animated component, который вы хотите анимировать.
Пример¶
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 |
|
Замечания¶
-
Обратный вызов, переданный функции
useAnimatedStyle
, сначала выполняется в потоке JavaScript, а сразу после этого - в потоке UI. Некоторые функции, такие какmeasure
иscrollTo
, имеют реализацию только в потоке UI. Чтобы безопасно использовать их внутри обратного вызоваuseAnimatedStyle
, добавьте в код проверку:1 2 3 4 5 6 7 8 9 10
function App() { const animatedStyles = useAnimatedStyle(() => { // highlight-next-line if (!_WORKLET) { return { offset: 0 }; } // safely use measure or scrollTo functions }); }
-
Следите за тем, чтобы не мутировать общие значения в обратном вызове
useAnimatedStyle
. Во многих случаях это может привести к бесконечному циклу. -
Определяйте динамическую часть стилей только с помощью
useAnimatedStyle
, а статическую храните отдельно, используя APIStyleSheet
или (если это действительно необходимо) с помощью встроенных стилей. Таким образом, вы избежите множества ненужных пересчетов стилей. Статические и динамические стили могут быть легко объединены с помощью синтаксиса[]
:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
function App() { const animatedStyles = useAnimatedStyle(() => ({ offset: sv.value, })); // highlight-next-line return ( <Animated.View style={[styles.box, animatedStyles]} /> ); } const styles = StyleSheet.create({ box: { height: 120, width: 120, backgroundColor: '#b58df1', }, });
-
Чтобы избежать дублирования кода, можно совместно использовать анимированные свойства компонентов.
Совместимость с платформами¶
Android | iOS | Web |
---|---|---|
✅ | ✅ | ✅ |