맛집 앱 만들기 프로젝트 Part4 상수화와 navigation 고도화
반복되는 값과 변경되지 않는 변수들을 상수화하기위해 상수 파일을 만든다
[matzip/front/src/constants/navigations.ts] 파일을 작성한다
authNavigations는 각 스크린들의 네임을 매번 호출하기때문에 따로 상수화를 해주고 export로 외부에서 가져올 수 있도록하였다
나중에 버튼 색상등 반복되어 사용되는 고정 변수들은 해당 파일에 선언하려고한다
1
2
3
4
5
6
const authNavigations = {
AUTH_HOME: 'AuthHome',
LOGIN: 'Login',
} as const;
export {authNavigations};
상수화 사용 및 타입지정으로 AuthStackNavigator 코드 작성
[matzip/front/src/navigations/stack/AuthStackNavigator.tsx] 파일을 작성한다
먼저 AuthStackNavigator.tsx파일은 네비게이션 라우팅 기능을 수행하는 파일로 어떤 페이지로 이동할때 제일 먼저 거쳐가는 곳이다
기존 내용에서 변경 부분을 확인해보자
- 6번째 줄에 상수화를 했던 authNavigations를 import해준다
- 8번째 줄에 해당 네비게이터에 들어오는 파라미터 (로그인, 회원가입등)를 타입으로 지정하여 개발자 실수를 줄이기위해 작성하였다 export한 이유는 다른 스크린에서도 해당 타입으로 검사후 전달하기 위해서 사용
- 12번째 줄에 제네릭 파라미터로 타입을 위에 8번째 줄에서 작성한 type검사를 진행하여 받는다
- 17, 21번째 줄 각각 네비게이터에서 관리하고있는 스크린 페이지들의 이름을 상수화로 작성하였다
name={authNavigations.HOME,authNavigations.LOGIN}
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
import {createStackNavigator} from '@react-navigation/stack';
import React from 'react';
import {StyleSheet} from 'react-native';
import AuthHomeScreen from '../screens/AuthHomeScreen';
import LoginScreen from '../screens/LoginScreen';
import {authNavigations} from '../constants';
export type AuthStackParamList = {
[authNavigations.AUTH_HOME]: undefined;
[authNavigations.LOGIN]: undefined;
};
const Stack = createStackNavigator<AuthStackParamList>();
function AuthStackNavigator() {
return (
<Stack.Navigator>
<Stack.Screen
name={authNavigations.AUTH_HOME}
component={AuthHomeScreen}
/>
<Stack.Screen name={authNavigations.LOGIN} component={LoginScreen} />
</Stack.Navigator>
);
}
const styles = StyleSheet.create({});
export default AuthStackNavigator;
AuthHomeScreen 파일 코드 작성
네비게이터의 관리받고있는 사용자 최초화면 AuthHomeScreen을 수정하도록하자
- 1번째 줄 Stack의 Screen으로 렌더링되는 컴포넌트는 자동으로
navigation props
와route props
를 주입받는다 - 2번째 줄 상수화시킨 파일을 불러오자
- 6번째 줄 위에서 네비게이터에 전달되는 파라미터를 제네릭 파라미터로 타입검사를하게끔 코드를 작성하였기 때문에 해당 AuthHomeScreen 스크린 파일에서도 타입을 하나 만들고 네비게이터에서 만들어둔 타입을 그대로 받아서 사용하자
- 7번째 줄 AuthHomeScreen 파라미터의 값 타입을 6번째 줄에서 만든 타입으로 검사하도록하자
- 14번째 줄 로그인버튼을 눌렀을때 네비게이션으로 전달되는 파라미터를 위에 2번째줄에서 상수화한
authNavigations.LOGIN
를 사용하자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import {StackScreenProps} from '@react-navigation/stack';
import {authNavigations} from '../constants';
import React from 'react';
import {Button, SafeAreaView, StyleSheet, View} from 'react-native';
import {AuthStackParamList} from '../navigation/AuthStackNavigator';
type AuthHomeScreenProps = StackScreenProps<AuthStackParamList>;
function AuthHomeScreen({navigation}: AuthHomeScreenProps) {
return (
<SafeAreaView>
<View>
<Button
title="로그인화면으로 이동"
onPress={() => navigation.navigate(authNavigations.LOGIN)}></Button>
</View>
</SafeAreaView>
);
}
const styles = StyleSheet.create({});
export default AuthHomeScreen;
This post is licensed under
CC BY 4.0
by the author.