더북(TheBook)

screens/RootStack.js

import React, {useEffect} from 'react';
import {createNativeStackNavigator} from '@react-navigation/native-stack';
import SignInScreen from './SignInScreen';
import WelcomeScreen from './WelcomeScreen';
import {useUserContext} from '../contexts/UserContext';
import MainTab from './MainTab';
import {getUser, subscribeAuth} from '../lib/users';

const Stack = createNativeStackNavigator();

function RootStack() {
  const {user, setUser} = useUserContext();

useEffect(() => {
  // 컴포넌트 첫 로딩 시 로그인 상태를 확인하고 UserContext에 적용
  const unsubscribe = subscribeAuth(async currentUser => {
    // 여기에 등록한 함수는 사용자 정보가 바뀔 때마다 호출되는데
    // 처음 호출될 때 바로 unsubscribe해 한 번 호출된 후에는 더 이상 호출되지 않게 설정
    unsubscribe();
    if (!currentUser) {
      return;
    }
    const profile = await getUser(currentUser.uid);
    if (!profile) {
      return;
    }
    setUser(profile);
  });
}, [setUser]);

(...)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.