現役フリーランスエンジニアが運営するテックメディア。日々の業務で得た知識を発信していきます!

  1. フロントエンド
  2. 2078 view

React Navigation入門〜Stack Navigation(スタックナビゲーション)編

最終更新日:2018/09/12

はじめに

本記事では、React NavigationがサポートしているStack Navigation(スタックナビゲーション)と呼ばれる画面遷移の実装方法をご紹介します。

実際のプロダクトでも使われることの多いNativeBaseと連携します。

完成品はこんな感じ

準備

本記事は、Expoを用いたReactNative開発を前提にしております。まだ設定ができてない方は下記の記事で設定してください!(5分くらいでできます!)

React Native入門〜Expoを使ってお手軽開発

プロジェクトの作成

create-react-native-appを用いてプロジェクトを新規作成します。

create-react-native-appの設定がお済みでない方はこちら

create-react-native-app stack-sample

ライブラリのインストール

React Navigation

npm install --save react-navigation

NativeBase

npm install native-base --save

依存リンク

react-native link

*うまくいかない場合はこちらが参考になるかもしれません。

スタックナビゲーションの実装

プロジェクト配下にsrcというディレクトリを作って以下のようにします。

index.js

import React, { Component } from "react";
import StackOne from "./StackOne.js";
import StackTwo from "./StackTwo.js";
import { createStackNavigator } from "react-navigation";
export const Stack = createStackNavigator({
  StackOne: StackOne,
  StackTwo: StackTwo
});

index.jsではStackOneとStackTwoをreact-navigationのcreateStackNavigator関数を使って画面遷移をします。以下にStackOne.js、StackTwo.jsも乗せておきますが、どちらも似たような構成になっているので一つだけ確実に理解しましょう!

StackOne.js

import React from "react";
import { Container, Body, Content, Header, Left, Right, Icon, Title, Button, Text } from "native-base";
export default class StackOne extends React.Component {
  static navigationOptions = ({ navigation }) => ({
    header: (
      <Header>
        <Left>
          <Button transparent onPress={() => navigation.goBack()}>
            <Icon name="arrow-back" />
          </Button>
        </Left>
        <Body>
          <Title>スタックその1</Title>
        </Body>
        <Right />
      </Header>
    )
  });
  render() {
    return (
      <Container>
        <Content padder>
          <Button full rounded primary
            style={{ marginTop: 10 }}
            onPress={() => this.props.navigation.navigate("StackTwo")}>
            <Text>スタック2へ</Text>
          </Button>
        </Content>
      </Container>
    );
  }
}

StackTwo.js

import React from "react";
import { Container,Body, Content, Header, Left, Right, Icon, Title, Button, Text } from "native-base";
export default class StackTwo extends React.Component {
  static navigationOptions = ({ navigation }) => ({
    header: (
      <Header>
        <Left>
          <Button transparent onPress={() => navigation.goBack()}>
            <Icon name="arrow-back" />
          </Button>
        </Left>
        <Body>
          <Title>スタックその2</Title>
        </Body>
        <Right />
      </Header>
    )
  });
  render() {
    return (
      <Container>
        <Content padder>
        <Button full rounded dark
          style={{ marginTop: 10 }}
          onPress={() => this.props.navigation.navigate("StackOne")}>
          <Text>スタック1へ</Text>
        </Button>
        </Content>
      </Container>
    );
  }
}

最後にApp.jsを以下のように書き換えます。

import React from 'react';
import { Stack } from "./src/StackScreen";
import Expo from "expo";

export default class App extends React.Component {
  constructor() {
    super();
    this.state = {
      isReady: false
    };
  }
  async componentWillMount() {
    await Expo.Font.loadAsync({
      Ionicons: require("native-base/Fonts/Ionicons.ttf")
    });
    this.setState({ isReady: true });
  }
  render() {
    if (!this.state.isReady) {
      return <Expo.AppLoading />;
    }
    return <Stack />;
  }
}

iconの読み込みのため少し複雑になってはいますが、index.jsで生成したstackの定義をそのまま読み込んでいるだけです。

Stack Navigation(スタックナビゲーション)はReact Navigationの中でも一番よく使うと言ってもいいくらいの機能なのでぜひマスターしましょう!

React Navigation入門シリーズ(こちらも合わせてどうぞ!!)

React Navigation入門〜Drawer Navigation(ドロワーナビゲーション)編
React Navigation入門〜Stack Navigation(スタックナビゲーション)編
React Navigation入門〜TabNavigation(タブナビゲーション)編

The following two tabs change content below.
WINDII

WINDII

WINDII(ウィンディ)は、フリーランスエンジニアが運営するテックメディアです。 日々の業務で得た知見を、皆さんに役立つコンテンツにして発信していくので応援よろしくお願いします! また、Slackで無料コミュニティも運営しています。たくさんのエンジニアが参加していて、プログラミングの相談や雑談などをしている楽しいコミュニティなので、興味ある方はぜひお気軽にご参加ください。 Slackコミュニティはこちらから

フロントエンドの最近記事

  1. Nuxt.js + Contentful。HeadlessCMSでポータルサイトを作る

  2. IOSアプリをAppStoreに公開する手順書(Ionic)

  3. IonicAcademyでIonic&Angularでのアプリ開発を学ぶ

  4. Ionic4+firebaseで認証をする方法【ログイン、ログアウト機能の実装】

  5. ハイブリッドアプリ開発チュートリアル【Ionic4+OnsenUI】

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP