React Native wrapper for Android and iOS ViewPager
npx @tessl/cli install tessl/npm-react-native-pager-view@7.0.0React Native Pager View is a cross-platform wrapper component for native ViewPager implementations on Android (ViewPager2) and iOS (UIPageViewController). It enables developers to create swipeable page interfaces with smooth native performance, supporting both horizontal and vertical scrolling, programmatic navigation, and extensive customization options.
npm install react-native-pager-viewimport PagerView from "react-native-pager-view";
import { usePagerView } from "react-native-pager-view";For type imports:
import type {
PagerViewProps,
PagerViewOnPageScrollEvent,
PagerViewOnPageSelectedEvent,
PageScrollStateChangedNativeEvent
} from "react-native-pager-view";import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
import PagerView from 'react-native-pager-view';
export default function App() {
return (
<PagerView style={styles.pagerView} initialPage={0}>
<View style={styles.page} key="1">
<Text>First page</Text>
</View>
<View style={styles.page} key="2">
<Text>Second page</Text>
</View>
<View style={styles.page} key="3">
<Text>Third page</Text>
</View>
</PagerView>
);
}
const styles = StyleSheet.create({
pagerView: {
flex: 1,
},
page: {
justifyContent: 'center',
alignItems: 'center',
},
});React Native Pager View is built around several key components:
usePagerView hook for managing state and animations with React Native ReanimatedCore ViewPager component providing swipeable page navigation with native performance and extensive configuration options.
export default class PagerView extends React.Component<PagerViewProps> {
setPage(selectedPage: number): void;
setPageWithoutAnimation(selectedPage: number): void;
setScrollEnabled(scrollEnabled: boolean): void;
}React hook for managing PagerView state, animations, and programmatic control with React Native Reanimated integration.
function usePagerView(params?: UsePagerViewParams): UsePagerViewProps;
interface UsePagerViewParams {
pagesAmount: number;
}
interface UsePagerViewProps {
ref: React.MutableRefObject<PagerView | null>;
activePage: number;
isAnimated: boolean;
pages: number[];
scrollState: string;
scrollEnabled: boolean;
progress: { position: number; offset: number };
overdragEnabled: boolean;
setPage: (page: number) => void;
addPage: () => void;
removePage: () => void;
toggleScroll: () => void;
toggleAnimation: () => void;
toggleOverdrag: () => void;
onPageScroll: Animated.Event;
onPageSelected: Animated.Event;
onPageScrollStateChanged: (e: PageScrollStateChangedNativeEvent) => void;
AnimatedPagerView: React.ComponentType<PagerViewProps>;
PagerView: typeof PagerView;
}type PagerViewOnPageScrollEvent = ReactNative.NativeSyntheticEvent<{
position: number;
offset: number;
}>;
type PagerViewOnPageSelectedEvent = ReactNative.NativeSyntheticEvent<{
position: number;
}>;
type PageScrollStateChangedNativeEvent = ReactNative.NativeSyntheticEvent<{
pageScrollState: 'idle' | 'dragging' | 'settling';
}>;interface PagerViewProps extends ViewProps {
scrollEnabled?: boolean;
layoutDirection?: 'ltr' | 'rtl';
initialPage?: number;
orientation?: 'horizontal' | 'vertical';
offscreenPageLimit?: number;
pageMargin?: number;
overScrollMode?: 'auto' | 'always' | 'never';
overdrag?: boolean;
keyboardDismissMode?: 'none' | 'on-drag';
onPageScroll?: (event: PagerViewOnPageScrollEvent) => void;
onPageSelected?: (event: PagerViewOnPageSelectedEvent) => void;
onPageScrollStateChanged?: (event: PageScrollStateChangedNativeEvent) => void;
}