見出し画像

React Native の Pager の使い方

「React Native」の「Pager」の使い方をまとめました。


前回

1. Pager

Pager」は、複数ページを横スワイプで切り替えるためのUIコンポーネントです。ページ位置を示す点「Dots Indicator」とセットで使われることが多いです。「React Native」では「FlatList」で実装することができます。

2. Pagerの実装

Pagerの実装手順は、次のとおりです。

2-1. React Nativeプロジェクトの作成

(1) React Nativeプロジェクトの作成。
最新版はビルドエラーになったので、1つ前をバージョン指定しています。

npx react-native init my_app --version 0.75.3
cd my_app

2-2. iOSのセットアップ

(1) podのインストール。

cd ios
pod install
cd ..

(2) Xcodeで署名し、iPhoneにインストールできることを確認。

2-3. Pagerの実装

(1) コードの編集。
・App.tsx

import React, { useState } from 'react';
import { View, Text, FlatList, Dimensions, NativeScrollEvent, NativeSyntheticEvent } from 'react-native';

const { width: screenWidth } = Dimensions.get('window');

// アプリ
const App = () => {
  const [currentPage, setCurrentPage] = useState(0);
  const data = ['Page 1', 'Page 2', 'Page 3'];

  // スクロール時に呼ばれる
  const onScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {
    const offsetX = event.nativeEvent.contentOffset.x;
    const pageIndex = Math.round(offsetX / screenWidth);
    setCurrentPage(pageIndex);
  };

  // ページの描画
  const renderItem = ({ item }: { item: string }) => (
    <View style={{ width: screenWidth, justifyContent: 'center', alignItems: 'center', backgroundColor: '#f0f0f0', height: 400 }}>
      <Text style={{ fontSize: 24, fontWeight: 'bold' }}>{item}</Text>
    </View>
  );

  // ドットインジケータの描画
  const renderDots = () => (
    <View style={{ flexDirection: 'row', justifyContent: 'center', alignItems: 'center', marginVertical: 16 }}>
      {data.map((_, index) => (
        <View key={index} style={[
          { width: 10, height: 10, borderRadius: 5, marginHorizontal: 5 }, 
          index === currentPage ? { backgroundColor: '#007aff' } : { backgroundColor: '#d3d3d3' } ]}
        />
      ))}
    </View>
  );

  // UI
  return (
    <View style={{ flex: 1, justifyContent: 'center' }}>
      <FlatList
        data={data}
        renderItem={renderItem}
        horizontal
        pagingEnabled
        onScroll={onScroll}
        keyExtractor={(item, index) => index.toString()}
        showsHorizontalScrollIndicator={false}
      />
      {renderDots()}
    </View>
  );
};

export default App;

(2) コードの実行。

npm start



いいなと思ったら応援しよう!