Shared Element Transitions — animate elements between screens using react-native-reanimated.
Setup:
1npx expo install react-native-reanimated react-native-shared-element
Implementation:
1import { createSharedElementTransition } from "react-native-shared-element";2import Animated, { useSharedValue, useAnimatedStyle } from "react-native-reanimated";34// List screen5function ListScreen({ navigation }) {6 return (7 <FlatList8 data={items}9 renderItem={({ item }) => (10 <TouchableOpacity11 onPress={() => navigation.navigate("Detail", { item })}12 >13 <SharedElement id={`item.${item.id}.image`}>14 <Image source={{ uri: item.imageUrl }} />15 </SharedElement>16 <Text>{item.title}</Text>17 </TouchableOpacity>18 )}19 />20 );21}2223// Detail screen24function DetailScreen({ route }) {25 const { item } = route.params;26 return (27 <View>28 <SharedElement id={`item.${item.id}.image`}>29 <Image source={{ uri: item.imageUrl }} style={styles.hero} />30 </SharedElement>31 <Text style={styles.title}>{item.title}</Text>32 </View>33 );34}
Navigator config:
1import { createSharedElementStackNavigator } from "react-navigation-shared-element";23const Stack = createSharedElementStackNavigator();45function App() {6 return (7 <Stack.Navigator>8 <Stack.Screen name="List" component={ListScreen} />9 <Stack.Screen10 name="Detail"11 component={DetailScreen}12 options={{ headerShown: false }}13 />14 </Stack.Navigator>15 );16}
Benefits: