화면을 전환시켜보자!
앱 내 화면 간 전환을 처리하기 위해 사용하는 라이브러리
yarn add @react-navigation/native
Navigation으로 만들어진 화면을 디바이스에 보여주는 라이브러리이다.
react navigation을 통해 탐색된 컨테이너를 앱에 노출해주기 위해 사용해야하는 종속 라이브러리
expo install react-native-screens react-native-safe-area-context
expo가 아닌, Xcode나 Android Studio로 개발을 할 경우, Pod을 설치해야 한다.
yarn add @react-navigation/native-stack
설치 끗
app.js를 화면으로 쓰지 않는다. Navigation도 컴포넌트 하나로 뺀다.app.tsx에 import해서 사용한다.pages/navigation
pages/screens

화면 이동시키기 위해 페이지 함수의 인자로 {navigation}을 받는다.
navigation은 모든 스크린마다 <Stack.Screen>으로 연결을 해줬으면 모든 컴포넌트에 네비게이션이 연결되어있는 것이라서 별도의 작업 없이 navigation을 가져올 수 있다.
화면을 이동시킬 태그에 onPress를 추가한다.
<MoveScreen onPress={()=>navigation.navigate("screen2")}>
⭐️ 3번의 Navigation 컨테이너에서 <Stack.Screen> 태그에 넣은 name의 값을 넣어줘야 한다.
pages/screens/screen1/index.tsx
import {  NativeSyntheticEvent,  Text,  TextInputChangeEventData } from 'react-native';
import styled from '@emotion/native'
export default function Screen1({navigation}) {
    const onChangeInput = (e:NativeSyntheticEvent<TextInputChangeEventData>)=>{
        console.log(e.nativeEvent.text)
    }
  return (
    <ViewContainer>
    <Title>프론트엔드 6기</Title>
    <SubTitle>리액트 네이티브 2일차</SubTitle>
    <Input onChange={onChangeInput} />
    <MoveScreen onPress={()=>navigation.navigate("screen2")}><TouchableTitle>스택 이동</TouchableTitle></MoveScreen>
    <Storage><Text>스토리지 저장</Text></Storage>
  </ViewContainer>
  );
}
pages/screens/screen2/index.tsx
const Screen2 = ()=>{
    return (
        <ViewContainer>
            <Text>여기가 Screen2입니다.</Text>
        </ViewContainer>
    )
}
<NavigationContainer>는 한 앱 당 하나만 만들어줘야 오류가 안 난다!
<Stack.Screen> 태그에는 name과 component 속성이 꼭! 들어가야한다.
2번에서 screen을 부를 때는 name으로 불러온다.
pages/navigation/index.tsx
import {NavigationContainer} from "@react-navigation/native"
import {createNativeStackNavigator} from "@react-navigation/native-stack"
import Screen1 from "../screens/screen1"
import Screen2 from "../screens/screen2"
const Stack = createNativeStackNavigator()
const Navigation = ()=>{
    return (
        <NavigationContainer>
            <Stack.Navigator>
                <Stack.Screen name="screen1" component={Screen1}></Stack.Screen>
                <Stack.Screen name="screen2" component={Screen2}></Stack.Screen>
            </Stack.Navigator>
        </NavigationContainer>
    )
}
export default Navigation
app.tsx에 3에서 만든 Navigation 컨테이너를 추가한다.app.tsx에 연결을 했으니, 이제 화면에서 Navigation에 설정한 화면을 볼 수 있다.import Navigation from './pages/navigation';
export default function App() {
  return (
    <Navigation />
  );
}
네비게이터 화면 안에 네비게이터를 렌더링할 경우, 위의 방법대로 하면 중첩 스택이기 때문에 에러가 발생한다.
그룹으로 만들어줘야 한다.
<Stack.Navigator>
  {isLoggedIn ? (
    // Screens for logged in users
    <Stack.Group>
      <Stack.Screen name="Home" component={Home} />
      <Stack.Screen name="Profile" component={Profile} />
    </Stack.Group>
  ) : (
    // Auth screens
    <Stack.Group screenOptions={{ headerShown: false }}>
      <Stack.Screen name="SignIn" component={SignIn} />
      <Stack.Screen name="SignUp" component={SignUp} />
    </Stack.Group>
  )}
  {/* Common modal screens */}
  <Stack.Group screenOptions={{ presentation: 'modal' }}>
    <Stack.Screen name="Help" component={Help} />
    <Stack.Screen name="Invite" component={Invite} />
  </Stack.Group>
</Stack.Navigator>