JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

React NativeのScrollViewコンポーネントとは?縦横スクロールの実装方法を解説

ScrollViewコンポーネントとは?

ScrollViewは、複数のコンポーネントやビュー(View)を格納できるスクロール可能なコンテナです。React Nativeのコアコンポーネントのひとつで、垂直方向と水平方向の両方のスクロールに対応しています。

ScrollViewは、アプリが動作しているプラットフォームに応じて、自動的にネイティブの対応要素へマッピングされる仕組みになっています。

  • Android:<ScrollView>
  • iOS:<UIScrollView>
  • Web環境:<div>

この仕組みにより、開発者はプラットフォーム間の違いを意識することなく、共通のコードでスクロール機能を実装できます。

例1:ScrollViewで垂直スクロールを実装する

この例では、Textコンポーネントを含むViewをScrollViewで囲み、さらにその外側を親Viewでラップした構造になっています。

まず、ScrollViewを使用するために必要なコンポーネントをインポートします。

import { Text, View, StyleSheet, ScrollView } from 'react-native';

次に、ScrollView内に表示するデータを、stateオブジェクトのnamesとして定義します。

state = {
  names: [
    { 'name': 'Ben', 'id': 1 },
    { 'name': 'Susan', 'id': 2 },
    { 'name': 'Robert', 'id': 3 },
    { 'name': 'Mary', 'id': 4 },
    { 'name': 'Daniel', 'id': 5 },
    { 'name': 'Laura', 'id': 6 },
    { 'name': 'John', 'id': 7 },
    { 'name': 'Debra', 'id': 8 },
    { 'name': 'Aron', 'id': 9 },
    { 'name': 'Ann', 'id': 10 },
    { 'name': 'Steve', 'id': 11 },
    { 'name': 'Olivia', 'id': 12 }
  ]
}

this.state.namesは配列なので、map()メソッドを使って各要素を取り出し、View→Textコンポーネントの中に名前を表示していきます。

<ScrollView>
  {this.state.names.map((item, index) => (
    <View key={item.id} style={styles.item}>
      <Text>{item.name}</Text>
    </View>
  ))}
</ScrollView>

ポイント:ScrollViewは、サイズの小さい静的なデータの表示に最適です。一方、動的で大量のリストデータを扱う場合は、パフォーマンスに優れたFlatListコンポーネントを使うのがおすすめです。

以下がScrollViewの完全なコードです。

import React, { Component } from "react";
import { Text, View, StyleSheet, ScrollView } from 'react-native';

class ScrollViewExample extends Component {
  state = {
    names: [
      { 'name': 'Ben', 'id': 1 },
      { 'name': 'Susan', 'id': 2 },
      { 'name': 'Robert', 'id': 3 },
      { 'name': 'Mary', 'id': 4 },
      { 'name': 'Daniel', 'id': 5 },
      { 'name': 'Laura', 'id': 6 },
      { 'name': 'John', 'id': 7 },
      { 'name': 'Debra', 'id': 8 },
      { 'name': 'Aron', 'id': 9 },
      { 'name': 'Ann', 'id': 10 },
      { 'name': 'Steve', 'id': 11 },
      { 'name': 'Olivia', 'id': 12 }
    ]
  }
  render(props) {
    return (
      <View style={{ flex: 1, justifyContent: 'center', margin: 15 }}>
        <ScrollView>
          {this.state.names.map((item, index) => (
            <View key={item.id} style={styles.item}>
              <Text>{item.name}</Text>
            </View>
          ))}
        </ScrollView>
      </View>
    );
  }
}
export default ScrollViewExample;

const styles = StyleSheet.create({
  item: {
    flexDirection: 'row',
    justifyContent: 'space-between',
    alignItems: 'center',
    padding: 30,
    margin: 2,
    borderColor: '#2a4944',
    borderWidth: 1,
    backgroundColor: '#d2f7f1'
  }
})

実行結果

React NativeのScrollViewコンポーネントとは?縦横スクロールの実装方法を解説

例2:ScrollViewで水平スクロールを実装する

デフォルトでは、ScrollViewはデータを垂直方向に表示します。データを水平方向に表示したい場合は、horizontal={true}というpropsを指定します。

<ScrollView horizontal={true}>
  {this.state.names.map((item, index) => (
    <View key={item.id} style={styles.item}>
      <Text>{item.name}</Text>
    </View>
  ))}
</ScrollView>

以下が水平スクロール版の完全なコードです。

import React, { Component } from "react";
import { Text, View, StyleSheet, ScrollView } from 'react-native';

class ScrollViewExample extends Component {
  state = {
    names: [
      { 'name': 'Ben', 'id': 1 },
      { 'name': 'Susan', 'id': 2 },
      { 'name': 'Robert', 'id': 3 },
      { 'name': 'Mary', 'id': 4 },
      { 'name': 'Daniel', 'id': 5 },
      { 'name': 'Laura', 'id': 6 },
      { 'name': 'John', 'id': 7 },
      { 'name': 'Debra', 'id': 8 },
      { 'name': 'Aron', 'id': 9 },
      { 'name': 'Ann', 'id': 10 },
      { 'name': 'Steve', 'id': 11 },
      { 'name': 'Olivia', 'id': 12 }
    ]
  }
  render(props) {
    return (
      <View style={{ flex: 1, justifyContent: 'center', marginTop: 100 }}>
        <ScrollView horizontal={true}>
          {this.state.names.map((item, index) => (
            <View key={item.id} style={styles.item}>
              <Text>{item.name}</Text>
            </View>
          ))}
        </ScrollView>
      </View>
    );
  }
}
export default ScrollViewExample;

const styles = StyleSheet.create({
  item: {
    flexDirection: 'row',
    justifyContent: 'space-between',
    alignItems: 'center',
    padding: 30,
    margin: 2,
    borderColor: '#2a4944',
    borderWidth: 1,
    height: 100,
    backgroundColor: '#d2f7f1'
  }
})

実行結果

React NativeのScrollViewコンポーネントとは?縦横スクロールの実装方法を解説

まとめ

ScrollViewは、小規模な静的データをスクロール表示するのに便利なコンポーネントです。デフォルトでは垂直スクロールですが、horizontal={true}を指定するだけで水平スクロールも簡単に実現できます。ただし、大量の動的データを扱う場合は、表示項目を仮想化してパフォーマンスを最適化できるFlatListの利用を検討しましょう。

  1. Steamワークショップとは?使い方を徹底解説|Modのダウンロード・削除方法まで

    Steamワークショップは、ゲームプラットフォーム「Steam」に組み込まれたコミュニティ機能の一つです。ユーザーやコンテンツ制作者が、お気に入りのゲーム向けに制作したコンテンツを自由にアップロード・ダウンロードできる場として運営されています。対応しているアイテムは多岐にわたり、Mod(改造データ)、アートワーク、スキン、マップなどが含まれます。Steamワークショップへのアクセス方法Steamワークショップには、Webブラウザから「Steamコミュニティ ワークショップページ」にアクセスして利用する方法と、Steamクライアント内で「コミュニティ」タブから「ワークショップ」を選択して開く方法

  2. React Nativeで動画を背景に使う方法をわかりやすく解説

    この記事では、React Nativeで背景動画(backgroundVideo)を作成する方法を解説します。React Nativeを始めたばかりの方は、まず「React Nativeでモバイルアプリ開発を始めるために知っておくべきこと」といった入門記事を読んでおくと理解がスムーズになります。背景動画はアプリのUIに洗練された印象を与える演出手段です。広告の表示やユーザーへのメッセージ伝達など、さまざまな用途に活用できます。今回はPeletonアプリのホーム画面のようなデザインを目標に、実装方法を見ていきましょう。前提条件実装を始める前に、以下の環境が整っている必要があります。react-n