reactnative
reactnavigation

react-navigationを使ったルーティング

パッケージをプロジェクトにaddする

yarn add react-navigation or npm install react-navigation --save

どういうもの?

React Navigation's StackNavigator provides a way for your app to transition between screens and manage navigation history.
react navigationのStackNavigatorはアプリ内の画面の移動と、そのhistoryを管理してくれるもの。(今はStackNavigatorしか使わないので他はわからない)

基本

navigationSimple
import React from 'react';
import { View, Text } from 'react-native';
import { StackNavigator } from 'react-navigation';

class HomeScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>Home Screen</Text>
      </View>
    );
  }
}

export default StackNavigator({
  Home: {
    screen: HomeScreen,
  },
});

公式ではStackNavigatorがcreateStackNavigatorになっているが、使えない

複数の画面のルーティング

navigationMulti
import React from 'react';
import { View, Text, Button } from 'react-native';
import { StackNavigator } from 'react-navigation';

class HomeScreen extends React.Component {
    render() {
        return (
            <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
                <Text>Home Screen</Text>
                <Button title="go detail" onPress={() => this.props.navigation.navigate('Detail')} />
            </View>
        );
    }
}
class DetailScreen extends React.Component {
    render() {
        return (
            <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
                <Text>detail Screen</Text>
                <Button title="go back" onPress={() => this.props.navigation.goBack()} />
            </View>
        );
    }
}

const RootStack = StackNavigator({
    Home: {
        screen: HomeScreen,
    },
    Detail: {
        screen: DetailScreen
    }
}, {
        initialRouteName: "Home"
    }
);

export default class App extends React.Component {
    render() {
        return <RootStack />
    }
}

オブジェクトのkeyがRoute名となり、その名前を使って行ったり来たりする。
initialRouteNameによってデフォルトの画面を決める(ない場合0番目の要素がデフォルトとなる)

画面移動は this.props.navigation....を使う
-特定の場所に行く場合: this.props.navigation.navigate(RouteName)
-戻る場合: this.props.navigation.goBack()