====== stacknavigator ======
===== 基本 =====
スタックナビゲーターは文字通り、画面を積み重ねていくイメージの画面遷移をする。
戻るで一つ前の画面に戻ることができる。
npm install --save react-navigation
App.js
import React from 'react';
import { StyleSheet} from 'react-native';
import { createAppContainer, createStackNavigator } from 'react-navigation'
import HomeScreen from './HomeScreen'
import DetailsScreen from './DetailsScreen'
import EditScreen from './EditScreen'
export default class App extends React.Component {
render() {
return ;
}
}
const styles = StyleSheet.create({
view:{
flex: 1,
alignItems: 'center',
justifyContent: 'center',
margin:10
},
button: {
margin: 20,
padding: 10,
backgroundColor: 'wheat'
}
});
const RootStack = createStackNavigator( //使用する画面を設定。
{
Home: {
screen: HomeScreen,
},
Details: {
screen: DetailsScreen,
},
Edit: {
screen: EditScreen,
},
},
{
initialRouteName: 'Home', //デフォルトの画面
}
);
const AppContainer = createAppContainer(RootStack);
HomeScreen.js
import React from 'react';
import { View, Text, TouchableOpacity , StyleSheet, FlatList , AsyncStorage} from 'react-native';
import { createAppContainer, createStackNavigator } from 'react-navigation'; // Version can be specified in package.json
import { Button } from 'react-native-elements';
import Icon from 'react-native-vector-icons/Ionicons';
export default class HomeScreen extends React.Component {
constructor(props) {
}
/**
* render
*
*/
render() {
return (
Home Screen
);
}
}
const styles = StyleSheet.create({
view:{
flex: 1,
alignItems: 'center',
justifyContent: 'center',
margin:10,
},
button: {
margin: 10,
padding: 1,
backgroundColor: 'rgba(0,103,171,1)',
borderRadius: 5,
width:300
},
text:{
color: 'white'
},
actionButtonIcon: {
fontSize: 20,
height: 22,
color: 'white',
}
});
DetailsScreen.js
import React from 'react';
import { Button, View, Text, TouchableOpacity , StyleSheet, FlatList , AsyncStorage} from 'react-native';
const styles = StyleSheet.create({
view:{
flex: 1,
alignItems: 'center',
justifyContent: 'center',
margin:10
},
button: {
margin: 20,
padding: 10,
backgroundColor: 'wheat'
}
});
export default class DetailsScreen extends React.Component {
render() {
console.log(this.props.navigation.state.params)
return (
Details Screen {this.props.navigation.state.params}
);
}
}
===== StackNavigator間コンポーネント間のデータ渡し1 =====
pushするときの第二引数にセットできる
this.props.navigation.push('Details',1)}>
this.props.navigation.state.paramsで取得できる
Details Screen {this.props.navigation.state.params}
===== StackNavigator間コンポーネント間のデータ渡し2 =====
this.props.navigation.push('Details',{star:1,rank:2}
のようにすることで、
{this.props.navigation.state.params.star} {this.props.navigation.state.params.rank}
のように取り出すことができる。