React Native
React Native에서 화면 전환하기 - Stack, Drawer, Tab
soultreemk
2024. 11. 11. 14:12
NavigationContainer 관련 install을 따로 진행해야 하는 불편함이 있다.
버전도 1년 새에 3버전이나 update되어 호환성 잘 지켜야 함.
[ 두 화면간 단순히 화면 전환 하는 법 ]
Stack.screen에 두개의 화면을 저장해 둔 후, 각 화면에서 name으로 접근 해 Button으로 navigate
// 메인 접근.js (index.tsx)
import { Text, View, StyleSheet, Button } from "react-native";
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import HomeScreen from './src/home';
import UserScreen from './src/user';
const Stack = createStackNavigator(); // navigator, screen 프로퍼티 return
export default function Index() {
return (
<NavigationContainer independent={true}>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} options={{headerShown: false}}/>
<Stack.Screen name="User" component={UserScreen}/>
</Stack.Navigator>
</NavigationContainer>
);
}
home.js
import 'react-native-gesture-handler';
import React, { Component } from 'react';
import { View, Text, Button } from 'react-native'
class HomeScreen extends Component {
render() {
return (
<View style={{
flex: 1,
alignItems: 'center',
justifyContent: 'center'
}}>
<Text>Home Screen</Text>
<Button
title="To User Screen"
onPress={()=> {
this.props.navigation.navigate('User')
}}
/>
</View>
)
}
}
export default HomeScreen;
user.js
import 'react-native-gesture-handler';
import React, { Component } from 'react';
import { View, Text, Button } from 'react-native'
class UserScreen extends Component {
render() {
return (
<View style={{
flex: 1,
alignItems: 'center',
justifyContent: 'center'
}}>
<Text>User Screen</Text>
<Button
title="To Home Screen"
onPress={()=> {
this.props.navigation.navigate('Home')
}}
/>
</View>
)
}
}
export default UserScreen;
[ 화면 이동 시 데이터 전달 ]
index.tsx (app.js)
import HomeScreen from './src/home';
import UserScreen from './src/user';
const Stack = createStackNavigator(); // navigator, screen 프로퍼티 return
export default function Index() {
return (
<NavigationContainer independent={true}>
<Stack.Navigator initialRouteName="User">
<Stack.Screen
name="Home"
component={HomeScreen}
options={{title: "Home Screen"}}
/>
<Stack.Screen
name="User"
component={UserScreen}
initialParams={{
userIdx: 50,
userName: "Gildong",
userLastName: "Go"
}}
options={{
// title: "User Screen",
// headerTitleStyle: {
// fontWeight: 'bold',
// color: 'purple'
// }
}}
/>
</Stack.Navigator>
</NavigationContainer>
);
}
각각 home.js / user.js
param으로 데이터를 전달한다
Draw Navigator, Tab Navigator도 코드 구성 방식은 유사함.
각 Navigator도 각각 install 진행해야함.