커스텀 컴포넌트
react-native-gesture-image-viewer
는 강력한 기능으로 완벽한 컴포넌트 커스터마이징이 가능합니다. 이미지뿐만 아니라 원하는 컴포넌트로 제스처를 지원하는 아이템을 만들 수 있습니다.
모달 컴포넌트
다음과 같이 원하는 Modal
을 사용하여 뷰어를 만들 수 있습니다.
import { FlatList, Image, Modal } from 'react-native';
import { GestureViewer } from 'react-native-gesture-image-viewer';
function App() {
const images = [...];
const [visible, setVisible] = useState(false);
return (
<Modal visible={visible} onRequestClose={() => setVisible(false)}>
<GestureViewer
data={images}
renderItem={renderImage}
ListComponent={FlatList}
onDismiss={() => setVisible(false)}
/>
</Modal>
);
}
리스트 컴포넌트
ListComponent
props를 통해 ScrollView
, FlatList
, FlashList
등 원하는 리스트를 지원합니다.
listProps
는 선택한 리스트 컴포넌트에 맞는 타입 추론을 제공하여, IDE에서 정확한 자동완성과 타입 안전성을 보장합니다.
import { FlashList } from '@shopify/flash-list';
function App() {
return (
<GestureViewer
data={images}
ListComponent={FlashList}
listProps={{
// ✅ FlashList props autocompletion
}}
/>
);
}
콘텐츠 컴포넌트
renderItem
props를 통해 expo-image
, FastImage
등 다양한 종류의 콘텐츠 컴포넌트를 주입하여 제스처를 사용할 수 있습니다.
import { GestureViewer } from 'react-native-gesture-image-viewer';
import { Image } from 'expo-image';
function App() {
const renderImage = useCallback((imageUrl: string) => {
return <Image source={{ uri: imageUrl }} style={{ width: '100%', height: '100%' }} contentFit="contain" />;
}, []);
return (
<GestureViewer
data={images}
renderItem={renderImage}
/>
);
}