App.tsx 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import 'react-native-gesture-handler';
  2. import * as React from 'react';
  3. import { DevSettings, View, Text } from 'react-native';
  4. import { enableScreens } from 'react-native-screens';
  5. import AsyncStorage from '@react-native-community/async-storage';
  6. import ReactNavigation4Example from './ReactNavigation4Example';
  7. import ReactNavigation5Example from './ReactNavigation5Example';
  8. import SimpleExample from './SimpleExample';
  9. import NativeStackExample from './NativeStackExample';
  10. import ReactNativeSafeAreaView from './ReactNativeSafeAreaView';
  11. enableScreens();
  12. const STORAGE_KEY = 'rnsac-current-example';
  13. export default function App() {
  14. const [currentExample, setCurrentExample] = React.useState<string | null>(
  15. null,
  16. );
  17. React.useEffect(() => {
  18. async function loadCurrentExample() {
  19. const example = await AsyncStorage.getItem(STORAGE_KEY);
  20. setCurrentExample(example ?? null);
  21. }
  22. loadCurrentExample();
  23. }, []);
  24. React.useEffect(() => {
  25. async function saveCurrentExample() {
  26. if (currentExample != null) {
  27. await AsyncStorage.setItem(STORAGE_KEY, currentExample);
  28. }
  29. }
  30. saveCurrentExample();
  31. }, [currentExample]);
  32. React.useEffect(() => {
  33. DevSettings.addMenuItem('Show Simple Example', () => {
  34. setCurrentExample('simple');
  35. });
  36. DevSettings.addMenuItem('Show React Navigation 4 Example', () => {
  37. setCurrentExample('react-navigation-4');
  38. });
  39. DevSettings.addMenuItem('Show React Navigation 5 Example', () => {
  40. setCurrentExample('react-navigation-5');
  41. });
  42. DevSettings.addMenuItem('Show Native Stack Example', () => {
  43. setCurrentExample('native-stack');
  44. });
  45. DevSettings.addMenuItem('Show React Native Safe Area View Example', () => {
  46. setCurrentExample('react-native-safe-area-view');
  47. });
  48. }, []);
  49. switch (currentExample) {
  50. case 'simple':
  51. return <SimpleExample />;
  52. case 'react-navigation-4':
  53. return <ReactNavigation4Example />;
  54. case 'react-navigation-5':
  55. return <ReactNavigation5Example />;
  56. case 'native-stack':
  57. return <NativeStackExample />;
  58. case 'react-native-safe-area-view':
  59. return <ReactNativeSafeAreaView />;
  60. default:
  61. return (
  62. <View
  63. style={{
  64. flex: 1,
  65. alignItems: 'center',
  66. justifyContent: 'center',
  67. padding: 24,
  68. }}
  69. >
  70. <Text style={{ textAlign: 'center', fontSize: 14 }}>
  71. Open the dev menu to choose an example
  72. </Text>
  73. </View>
  74. );
  75. }
  76. }