1- import { HashRouter , Route , Routes } from "react-router-dom" ;
2- import { useState , useEffect } from "react" ;
1+ import { HashRouter , Routes , Route , useLocation } from "react-router-dom" ;
2+ import { useEffect , useState } from "react" ;
33
44import Header from "./components/header/Header" ;
55import Footer from "./components/footer/Footer" ;
@@ -19,65 +19,30 @@ import MyCommunity from "./components/mypage/MyCommunity";
1919import ScrollToTop from "./components/common/ScrollToTop" ;
2020import CommunityWrite from "./components/community/CommunityWrite" ;
2121
22-
23- function App ( ) {
22+ function AppContent ( ) {
23+ const location = useLocation ( ) ;
2424 const [ isDark , setIsDark ] = useState ( false ) ;
25-
26- // 로그인 상태 관리 추가
2725 const [ isLoggedIn , setIsLoggedIn ] = useState ( false ) ;
2826 const [ nickname , setNickname ] = useState ( '' ) ;
27+ const [ isLoginModalOpen , setIsLoginModalOpen ] = useState ( false ) ;
28+
29+ const isSignupPage = location . pathname === "/signup" ;
2930
30- // 로그인 상태 확인
3131 useEffect ( ( ) => {
3232 const token = localStorage . getItem ( 'token' ) ;
3333 const storedUsername = localStorage . getItem ( 'username' ) ;
34-
35- console . log ( '🔍 App.js 로그인 상태 확인:' , { token : ! ! token , username : storedUsername } ) ;
36-
3734 if ( token && storedUsername ) {
3835 setIsLoggedIn ( true ) ;
3936 setNickname ( storedUsername ) ;
40- console . log ( '✅ App.js에서 로그인 상태로 설정됨' ) ;
4137 } else {
4238 setIsLoggedIn ( false ) ;
4339 setNickname ( '' ) ;
44- console . log ( '❌ App.js에서 비로그인 상태로 설정됨' ) ;
4540 }
4641 } , [ ] ) ;
4742
48- // 로그인 상태 변경을 감지하기 위한 이벤트 리스너 (선택사항)
49- useEffect ( ( ) => {
50- const handleStorageChange = ( ) => {
51- const token = localStorage . getItem ( 'token' ) ;
52- const storedUsername = localStorage . getItem ( 'username' ) ;
53-
54- if ( token && storedUsername ) {
55- setIsLoggedIn ( true ) ;
56- setNickname ( storedUsername ) ;
57- } else {
58- setIsLoggedIn ( false ) ;
59- setNickname ( '' ) ;
60- }
61- } ;
62-
63- // storage 이벤트 리스너 추가
64- window . addEventListener ( 'storage' , handleStorageChange ) ;
65-
66- // 클린업
67- return ( ) => {
68- window . removeEventListener ( 'storage' , handleStorageChange ) ;
69- } ;
70- } , [ ] ) ;
71-
72- useEffect ( ( ) => {
73- document . body . classList . toggle ( "dark-mode" , isDark ) ;
74- } , [ isDark ] ) ;
75-
7643 useEffect ( ( ) => {
7744 const savedTheme = localStorage . getItem ( "theme" ) ;
78- if ( savedTheme === "dark" ) {
79- setIsDark ( true ) ;
80- }
45+ if ( savedTheme === "dark" ) setIsDark ( true ) ;
8146 } , [ ] ) ;
8247
8348 useEffect ( ( ) => {
@@ -86,29 +51,29 @@ function App() {
8651 } , [ isDark ] ) ;
8752
8853 return (
89- < HashRouter >
90- < Header
91- isDark = { isDark }
92- setIsDark = { setIsDark }
93- isLoggedIn = { isLoggedIn }
94- nickname = { nickname }
95- />
54+ < >
55+ { ! isSignupPage && (
56+ < Header
57+ isDark = { isDark }
58+ setIsDark = { setIsDark }
59+ isLoggedIn = { isLoggedIn }
60+ nickname = { nickname }
61+ onLoginModalOpen = { ( ) => setIsLoginModalOpen ( true ) }
62+ />
63+ ) }
64+
9665 < ScrollToTop />
66+
9767 < Routes >
9868 < Route path = "/" element = { < Main /> } />
99- < Route path = "/login" element = { < Login /> } />
10069 < Route path = "/signup" element = { < SignUp /> } />
101-
10270 < Route path = "/ide" element = { < IDE /> } />
10371 < Route path = "/ide/:param" element = { < IDE /> } />
10472 < Route path = "/ide/:language/:filename" element = { < IDE /> } />
105-
10673 < Route path = "/community" element = { < Community /> } />
107- < Route path = "/community/write" element = { < CommunityWrite /> } /> { /* ✅ 추가 */ }
108-
74+ < Route path = "/community/write" element = { < CommunityWrite /> } />
10975 < Route path = "/broadcast" element = { < Codecast /> } />
11076 < Route path = "/startbroadcast" element = { < StartCodecast /> } />
111-
11277 < Route path = "/mypage" element = { < MyPageLayout nickname = { nickname } /> } >
11378 < Route index element = { < Mypage nickname = { nickname } /> } />
11479 < Route path = "project" element = { < MyProject /> } />
@@ -118,9 +83,25 @@ function App() {
11883 </ Route >
11984 </ Routes >
12085
121- < Footer />
122- </ HashRouter >
86+ { ! isSignupPage && < Footer /> }
87+
88+ { isLoginModalOpen && (
89+ < Login
90+ onClose = { ( ) => setIsLoginModalOpen ( false ) }
91+ onLoginSuccess = { ( ) => {
92+ setIsLoggedIn ( true ) ;
93+ setNickname ( localStorage . getItem ( 'username' ) || '' ) ;
94+ } }
95+ />
96+ ) }
97+ </ >
12398 ) ;
12499}
125100
126- export default App ;
101+ export default function App ( ) {
102+ return (
103+ < HashRouter >
104+ < AppContent />
105+ </ HashRouter >
106+ ) ;
107+ }
0 commit comments