[React Native] React Navigation - 12. [Tab] 설치 및 화면 Linking
2022. 1. 19. 20:13ㆍReact Native/Basic
12. [Tab] 설치 및 화면 Linking
tab navigator는 화면 상단이나 하단에 탭을 생성해서 터치 시에 해당 스크린으로 이동하게 도와주는 navigator이다.
https://reactnavigation.org/docs/tab-based-navigation
https://reactnavigation.org/docs/tab-based-navigation/
reactnavigation.org
공식문서 보고 설치 따라서 하고 또다시 import 와 객체를 만들어 준 뒤에 사용!
home_tab.js
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import React, {Component} from 'react';
import {StyleSheet, Text, View, Button} from 'react-native';
class TabHomeScreen extends Component {
render() {
return (
<View
style={{
flex: 1,
alignItems: 'center',
justifyContent: 'center',
}}>
<Text>Home Screen</Text>
</View>
);
}
}
const styles = StyleSheet.create({});
export default TabHomeScreen;
user_tab.js
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import React, {Component} from 'react';
import {StyleSheet, Text, View, Button, Image} from 'react-native';
import {NavigationContainer} from '@react-navigation/native';
import {createNativeStackNavigator} from '@react-navigation/native-stack';
import Logo from './assets/pics/home_icon.png';
class TabUserScreen extends Component {
render() {
return (
<View
style={{
flex: 1,
alignItems: 'center',
justifyContent: 'center',
}}>
<Text>User Screen</Text>
</View>
);
}
}
const styles = StyleSheet.create({});
export default TabUserScreen;
App.js
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import React, {Component} from 'react';
import {StyleSheet, Text, View, Image, Button, Linking} from 'react-native';
import {DrawerActions, NavigationContainer} from '@react-navigation/native';
import {createNativeStackNavigator} from '@react-navigation/native-stack';
import {
createDrawerNavigator,
DrawerContentScrollView,
DrawerItem,
DrawerItemList,
} from '@react-navigation/drawer';
import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
import HomeScreen from './src/home';
import UserScreen from './src/user';
import LogoTitle from './src/logo';
import DrawerHomeScreen from './src/home_drawer';
import DrawerUserScreen from './src/user_drawer';
import PictogramHome from './src/assets/pics/home_icon.png';
import SideDrawer from './src/my_drawer';
import TabHomeScreen from './src/home_tab';
import TabUserScreen from './src/user_tab';
const Stack = createNativeStackNavigator();
const Drawer = createDrawerNavigator();
const Tab = createBottomTabNavigator();
// CustomDrawerContent = props => {
// return (
// <DrawerContentScrollView {...props}>
// <DrawerItemList {...props} />
// <DrawerItem
// label="Help"
// onPress={() => Linking.openURL('http://www.google.com')}
// icon={() => <LogoTitle />}
// />
// <DrawerItem label="Info" onPress={() => alert('Info window')} />
// </DrawerContentScrollView>
// );
// };
class App extends Component {
////////////////////////////////////////stack navigator의 일부
// logoTitle = () => {
// return (
// <Image
// style={{width: 40, height: 40}}
// source={require('./src/assets/pics/home_icon.png')}
// />
// );
// };
render() {
return (
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="Home" component={TabHomeScreen} />
<Tab.Screen name="User" component={TabUserScreen} />
</Tab.Navigator>
</NavigationContainer>
////////////////////////////////////drawer navigator
// <NavigationContainer>
// <Drawer.Navigator
// initialRouteName="Home"
// screenOptions={{
// drawerType: 'front',
// drawerPosition: 'right',
// drawerStyle: {
// backgroundColor: '#c6cbef',
// width: 200,
// },
// drawerActiveTintColor: 'red',
// drawerActiveBackgroundColor: 'skyblue',
// }}
// drawerContent={props => <SideDrawer {...props} />}>
// <Drawer.Screen
// name="Home"
// component={DrawerHomeScreen}
// options={{
// drawerIcon: () => {
// <Image
// source={PictogramHome}
// style={{width: 40, height: 40}}
// />;
// },
// }}
// />
// <Drawer.Screen name="User" component={DrawerUserScreen} />
// </Drawer.Navigator>
// </NavigationContainer>
////////////////////////////////////////stack navigator
// <NavigationContainer>
// <Stack.Navigator
// initialRouteName="Home"
// screenOptions={{
// headerStyle: {
// backgroundColor: '#a4511e',
// },
// headerTintColor: '#ffffff',
// headerTitleStyle: {
// fontWeight: 'bold',
// color: '#f3d612',
// },
// }}>
// <Stack.Screen
// name="Home"
// component={HomeScreen}
// options={{
// title: 'Home Screen',
// headerTitle: () => <this.logoTitle />,
// headerRight: () => (
// <Button
// title="info"
// onPress={() => alert('I am a button!!')}
// color="orange"
// />
// ),
// }}
// />
// <Stack.Screen
// name="User"
// component={UserScreen}
// initialParams={{
// userIdx: 50,
// userName: 'Gildong',
// userLastName: 'Go',
// }}
// options={{
// title: 'User Screen',
// headerStyle: {
// backgroundColor: 'pink',
// },
// headerTintColor: 'red',
// headerTitleStyle: {
// fontWeight: 'bold',
// color: 'purple',
// },
// }}
// />
// </Stack.Navigator>
// </NavigationContainer>
);
}
}
const styles = StyleSheet.create({});
export default App;
참고 자료
iOS/Android 앱 개발을 위한 실전 React Native - Basic - 인프런 | 강의
Mobile App Front-End 개발을 위한 React Native의 기초 지식 습득을 목표로 하고 있습니다. 진입장벽이 낮은 언어/API의 활용을 통해 비전문가도 쉽게 Native Mobile App을 개발할 수 있도록 제작된 강의입니다
www.inflearn.com
'React Native > Basic' 카테고리의 다른 글
[React Native] React Navigation - 14. React Native Vector Icons 설치 (0) | 2022.01.20 |
---|---|
[React Native] React Navigation - 13. [Tab] Style 설정 (0) | 2022.01.19 |
[React Native] React Navigation - 11. [Drawer] Custom Component (0) | 2022.01.19 |
[React Native] React Navigation - 10. [Drawer] Style 설정 (0) | 2022.01.19 |
[React Native] React Navigation - 9. [Drawer] 설치 및 화면 Linking (0) | 2022.01.19 |