InactiveStack.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import React from 'react';
  2. import { Button, Text, StatusBar, View, StyleSheet } from 'react-native';
  3. import {
  4. SafeAreaView,
  5. createStackNavigator,
  6. createSwitchNavigator,
  7. NavigationActions,
  8. } from 'react-navigation';
  9. const runSubRoutes = navigation => {
  10. navigation.dispatch(NavigationActions.navigate({ routeName: 'First2' }));
  11. navigation.dispatch(NavigationActions.navigate({ routeName: 'Second2' }));
  12. navigation.dispatch(NavigationActions.navigate({ routeName: 'First2' }));
  13. };
  14. const runSubRoutesWithIntermediate = navigation => {
  15. navigation.dispatch(toFirst1);
  16. navigation.dispatch(toSecond2);
  17. navigation.dispatch(toFirst);
  18. navigation.dispatch(toFirst2);
  19. };
  20. const runSubAction = navigation => {
  21. navigation.dispatch(toFirst2);
  22. navigation.dispatch(toSecond2);
  23. navigation.dispatch(toFirstChild1);
  24. };
  25. const DummyScreen = ({ routeName, navigation, style }) => {
  26. return (
  27. <SafeAreaView
  28. style={[
  29. StyleSheet.absoluteFill,
  30. {
  31. alignItems: 'center',
  32. justifyContent: 'center',
  33. backgroundColor: 'white',
  34. },
  35. style,
  36. ]}
  37. >
  38. <Text style={{ fontWeight: '800' }}>
  39. {routeName}({navigation.state.key})
  40. </Text>
  41. <View>
  42. <Button title="back" onPress={() => navigation.goBack()} />
  43. <Button title="dismiss" onPress={() => navigation.dismiss()} />
  44. <Button
  45. title="between sub-routes"
  46. onPress={() => runSubRoutes(navigation)}
  47. />
  48. <Button
  49. title="between sub-routes (with intermediate)"
  50. onPress={() => runSubRoutesWithIntermediate(navigation)}
  51. />
  52. <Button
  53. title="with sub-action"
  54. onPress={() => runSubAction(navigation)}
  55. />
  56. </View>
  57. <StatusBar barStyle="default" />
  58. </SafeAreaView>
  59. );
  60. };
  61. const createDummyScreen = routeName => {
  62. const BoundDummyScreen = props => DummyScreen({ ...props, routeName });
  63. return BoundDummyScreen;
  64. };
  65. const toFirst = NavigationActions.navigate({ routeName: 'First' });
  66. const toFirst1 = NavigationActions.navigate({ routeName: 'First1' });
  67. const toFirst2 = NavigationActions.navigate({ routeName: 'First2' });
  68. const toSecond2 = NavigationActions.navigate({ routeName: 'Second2' });
  69. const toFirstChild1 = NavigationActions.navigate({
  70. routeName: 'First',
  71. action: NavigationActions.navigate({ routeName: 'First1' }),
  72. });
  73. export default createStackNavigator(
  74. {
  75. Other: createDummyScreen('Leaf'),
  76. First: createStackNavigator({
  77. First1: createDummyScreen('First1'),
  78. First2: createDummyScreen('First2'),
  79. }),
  80. Second: createStackNavigator({
  81. Second1: createDummyScreen('Second1'),
  82. Second2: createDummyScreen('Second2'),
  83. }),
  84. },
  85. {
  86. headerMode: 'none',
  87. }
  88. );