diff --git a/src/App.jsx b/src/App.jsx index 9766bc7..982fe54 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,6 +1,7 @@ import React, { useEffect } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { setActiveTab } from './store/slices/appSlice'; +import { login } from './store/slices/userSlice'; import { BrowserRouter, Routes, @@ -29,7 +30,6 @@ import FaqScreen from './components/screens/FaqScreen'; import CertificationHistoryScreen from './components/screens/CertificationHistoryScreen'; import CarbonInfoScreen from './components/screens/CarbonInfoScreen'; import AdminScreen from './components/screens/AdminScreen'; -// Onboarding, Home, Map, Certification components live in src/components/screens const TAB_TO_PATH = { home: '/', @@ -53,10 +53,15 @@ export default function App() { const appState = useSelector((state) => state.app.appState); const activeTab = useSelector((state) => state.app.activeTab); const dispatch = useDispatch(); - // removed top-level navigate; navigation is handled inside AppContent via react-router - // 앱 초기화 시 마이페이지 데이터 로드는 각 화면에서 필요할 때 로드하도록 변경 - // HomeScreen과 MyPageScreen에서 각각 필요 시 호출 + // 👇 추가: 앱 시작 시 토큰으로 로그인 상태 복구 + useEffect(() => { + const token = localStorage.getItem('token'); + if (token) { + // localStorage에 토큰이 있으면 Redux에 로그인 상태 복구 + dispatch(login({ token })); + } + }, [dispatch]); if (appState === 'splash') return ; if (appState === 'onboarding') return ; @@ -95,7 +100,6 @@ export default function App() { path='/map' element={} /> - {/* 인증 */} } @@ -151,11 +155,9 @@ export default function App() { path='/admin' element={} /> - {/* 404: 알 수 없는 경로는 홈으로 리디렉션 */} } /> - {/* 하단 네비게이션 바 숨김 경로 */} {location.pathname !== '/addChallenge' && location.pathname !== '/admin' && location.pathname !== '/ranking' && @@ -177,4 +179,4 @@ export default function App() { ); -} +} \ No newline at end of file