Post

맛집 앱 만들기 프로젝트 Part6 스크린 구조 및 옵션 설정

스크린 폴더 구조화하기

현재 스크린파일들은 [matzip/front/src/navigations/screens] 밑에 있는데 조금 더 세분화하여 구조화를 진행한다

  • screens

    • auth

      • AuthHomeScreen.tsx
      • LoginScreen.tsx
      • SignupScreen.tsx
    • calender

      • CalendarHomeScreen.tsx
    • feed

      • FeedHomeScreen.tsx
    • map

      • MapHoemScreen.tsx

MainDrawerNavigator 코드 작성

[matzip/front/src/navigations/drawer/MainDrawerNavigator.tsx]

로그인된 사용자 화면인 drawer navigator에 피드 화면과 캘린더 화면을 추가하기 위해 코드를 추가한다

  • 11, 12번째 줄 feed, calendar 스크린을 추가한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import {createDrawerNavigator} from '@react-navigation/drawer';
import MapHomeScreen from '../../screens/map/MapHomeScreen';
import FeedHomeScreen from '../../screens/feed/FeedHomeScreen';
import CalendarHomeScreen from '../../screens/calender/CalendarHomeScreen';

const Drawer = createDrawerNavigator();
function MainDrawerNavigator() {
  return (
    <Drawer.Navigator>
      <Drawer.Screen name="MapHome" component={MapHomeScreen} />
      <Drawer.Screen name="FeedHome" component={FeedHomeScreen} />
      <Drawer.Screen name="CalendarHome" component={CalendarHomeScreen} />
    </Drawer.Navigator>
  );
}

export default MainDrawerNavigator;

FeedHomeScreen 코드 작성

[matzip/front/src/navigations/screen/feed/FeedHomeScreen .tsx]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import React from 'react';
import {StyleSheet, Text, View} from 'react-native';

function FeedHomeScreen() {
  return (
    <View>
      <Text>피드홈</Text>
    </View>
  );
}

const styles = StyleSheet.create({});

export default FeedHomeScreen;

FeedHomeScreen 코드 작성

[matzip/front/src/navigations/screen/calender/CalendarHomeScreen.tsx]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import React from 'react';
import {StyleSheet, Text, View} from 'react-native';

function CalendarHomeScreen() {
  return (
    <View>
      <Text>캘린더</Text>
    </View>
  );
}

const styles = StyleSheet.create({});

export default CalendarHomeScreen;


SignupScreen 코드 작성

[matzip/front/src/navigations/screen/auth/SignupScreen .tsx]

비로그인 사용자인 stack navigation에서 사용할 회원가입 스크린도 간단하게 추가해두도록하자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import React from 'react';
import {StyleSheet, Text, View} from 'react-native';

function SignupScreen() {
  return (
    <View>
      <Text>회원가입스크린</Text>
    </View>
  );
}

const styles = StyleSheet.create({});

export default SignupScreen;

constants 상수 파일 코드 수정

[matzip/front/src/constants/navigations.ts]

  • 4번째 줄에 회원가입 파라미터로 사용할 SIGNUP을 추가해두었다
1
2
3
4
5
6
7
8
const authNavigations = {
  AUTH_HOME: 'AuthHome',
  LOGIN: 'Login',
  SIGNUP: 'Signup',
} as const;

export {authNavigations};

AuthStackNavigator 파일 코드 수정

[matzip/front/src/navigations/stack/AuthStackNavigator.tsx]

  • 13번째 줄에 [authNavigations.SIGNUP]: undefined; 를 추가하여 상수화한 SIGNUP도 파라미터 타입으로 지정해두도록 한다
  • 42번째 줄에 회원가입 스크린도 추가하도록 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import {createStackNavigator} from '@react-navigation/stack';
import React from 'react';
import {StyleSheet} from 'react-native';
import AuthHomeScreen from '../../screens/auth/AuthHomeScreen';
import LoginScreen from '../../screens/auth/LoginScreen';
import {authNavigations} from '../../constants';
import SignupScreen from '../../screens/auth/SignupScreen';

export type AuthStackParamList = {
  [authNavigations.AUTH_HOME]: undefined;
  [authNavigations.LOGIN]: undefined;
  [authNavigations.SIGNUP]: undefined;
};
const Stack = createStackNavigator<AuthStackParamList>();
function AuthStackNavigator() {
  return (
    <Stack.Navigator
      screenOptions={{
        cardStyle: {
          backgroundColor: 'white',
        },
        headerStyle: {
          backgroundColor: 'white',
          shadowColor: 'gray',
        },
        headerTitleStyle: {
          fontSize: 15,
        },
        headerTintColor: 'black',
      }}>
      <Stack.Screen
        name={authNavigations.AUTH_HOME}
        component={AuthHomeScreen}
        options={{headerTitle: '', headerShown: false}}
      />
      <Stack.Screen
        name={authNavigations.LOGIN}
        component={LoginScreen}
        options={{headerTitle: '로그인'}}
      />
      <Stack.Screen
        name={authNavigations.SIGNUP}
        component={SignupScreen}
        options={{headerTitle: '회원가입'}}
      />
    </Stack.Navigator>
  );
}

const styles = StyleSheet.create({});

export default AuthStackNavigator;


AuthHomeScreen 파일 코드 수정

[matzip/front/src/navigations/screen/auth/AuthHomeScreen.tsx]

  • 15번째 줄에 회원가입 버튼도 추가해두도록 한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import {StackScreenProps} from '@react-navigation/stack';
import React from 'react';
import {Button, SafeAreaView, StyleSheet, View} from 'react-native';
import {AuthStackParamList} from '../../navigations/stack/AuthStackNavigator';
import {authNavigations} from '../../constants';

type AuthHomeScreenProps = StackScreenProps<AuthStackParamList>;
function AuthHomeScreen({navigation}: AuthHomeScreenProps) {
  return (
    <SafeAreaView>
      <View>
        <Button
          title="로그인화면으로 이동"
          onPress={() => navigation.navigate(authNavigations.LOGIN)}></Button>
        <Button
          title="회원가입으로 이동"
          onPress={() => navigation.navigate(authNavigations.SIGNUP)}></Button>
      </View>
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({});

export default AuthHomeScreen;

This post is licensed under CC BY 4.0 by the author.