개발/React Native

[React Native] React Native Navigation

leo._. 2022. 8. 17. 11:30
반응형

Install

$ npm install react-native-gesture-handler 
$ npm install @react-navigation/stack 
$ npm install @react-navigation/native
$ npm install react-native-safe-area-context 
$ npm install react-native-reanimated 
$ npm install @react-native-community/masked-view

 

App or Root

react-native-gesture-handler 를 import

 

import 'react-native-gesture-handler';

function App() {
  return (
     <View></View>
  );
}

export default App;

 

Stack.Screen

CreateStackNavigator 를 이용
Stack.Screen 을 이용하여 component 노출

import React from 'react';
import 'react-native-gesture-handler';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { SafeAreaProvider } from 'react-native-safe-area-context';

import HomeScreen from './screens/home';
import CategoryScreen form './screens/category';
import SettingScreen from './screens/setting';

const Stack = createStackNavigator();
function App() {
  return (
    <SafeAreaProvider>
      <NavigationContainer>
        <Stack.Navigator initialRouteName="home">
        	<Stack.Screen name="home" component={HomeScreen} />
            <Stack.Screen name="category" component={CategoryScreen} />
          	<Stack.Screen name="setting" component={SettingScreen} />          	          
        </Stack.Navigator>
      </NavigationContainer>
    </SafeAreaProvider>
  );
}
export default App;

 

 

Move Page

NavigationContainer 로 감싸져있으면 Props로 Navigation 객체가 전달됨

import React from 'react';
import { View, Button } from 'react-native';

function SettingScreen({navigation}) {
  const moveToHome = () => {
    navigation.push('home');
  };
  return (
    <View>
    	<Button title="홈으로" onPress={moveToHome} />
    </View>
  );
}
export default SettingScreen;

 

SafeAreaView

view가 상단과 하단 영역 침범을 방지하는 역할

import {SafeAreaView} from 'react-native-safe-area-context';

function App() {
  return (
    	<SafeAreaView>
        
        	//...
        
        </SafeAreaView>
    )
}
반응형