Motion

Reactnatively's motion system is built on react-native-reanimated. It ships pre-configured spring presets, interaction-aware press animations, entrance animation hooks, and transition components — all coordinated by the global InteractionProvider.

Building blocks

Reduced motion

All motion hooks read the OS reduced-motion accessibility setting via Reanimated's useReducedMotion. When reduced motion is enabled, animations snap to their end state without interpolation. No extra configuration needed.

typescript
import { useReducedMotion } from 'reactnatively';

function MyAnimatedComponent() {
  const isReduced = useReducedMotion();
  // isReduced === true when system setting is on
  // All built-in motion hooks handle this automatically
}

Quick start — press animation

PressableCard.tsx
1import { usePressAnimation } from 'reactnatively';2import Animated from 'react-native-reanimated';3import { Pressable, Text } from 'react-native';45export function PressableCard() {6  const { animatedStyle, handlers } = usePressAnimation({7    pressedScale:   0.96,  // scale down 4% on press8    pressedOpacity: 0.88,  // reduce opacity on press9  });1011  return (12    <Animated.View style={animatedStyle}>13      <Pressable14        onPressIn={handlers.onPressIn}15        onPressOut={handlers.onPressOut}16        style={{ padding: 20, borderRadius: 16, backgroundColor: 'rgba(255,255,255,0.06)' }}17      >18        <Text style={{ color: '#fff' }}>Press me</Text>19      </Pressable>20    </Animated.View>21  );22}

Quick start — entrance animation

AnimatedCard.tsx
1import { useEntranceAnimation } from 'reactnatively';2import Animated from 'react-native-reanimated';3import { View, Text } from 'react-native';45export function AnimatedCard({ visible }: { visible: boolean }) {6  const style = useEntranceAnimation({7    variant:  'slideUp',   // 'fade' | 'scale' | 'slideUp' | 'slideDown'8    visible,9    delay:    80,          // ms delay before animation starts10  });1112  return (13    <Animated.View style={style}>14      <View style={{ padding: 20 }}>15        <Text style={{ color: '#fff' }}>Animated content</Text>16      </View>17    </Animated.View>18  );19}