[개인 포트폴리오] [클라이밍 커뮤니티 SNS] 2. 코드 분석 <App.js>
2024. 12. 20. 09:48ㆍ웹개발 포트폴리오
728x90
반응형
라우팅을 하여 연결될 (렌더링 될) 컴포넌트를 설정하고, ProtectedRoute를 통해 인증된 사용자만 접근할 수 있는 컴포넌트를 구분하며,사용자 인증 상태 변화 (로그인이 되었는지)를 확인하여 로딩을 해제시키고, 인증 상태가 완료될 때까진 로딩 화면을 표시하게 한다
import { RouterProvider, createBrowserRouter } from "react-router-dom";
import styled from "styled-components";
import React, { useState, useEffect } from "react";
import { auth } from "./firebase";
import ProtectedRoute from "./component/protected-route";
import Layout from "./component/layout";
import LoadingScreen from "./component/loading-screen";
import Login from "./routes/login";
import Profile from "./routes/profile";
import CreateAccount from "./routes/create-account";
import Posting from "./component/posting";
import Developer from "./component/developer";
import './App.css';
import Timeline from "./component/timeline";
import LikeNotifications from "./component/LikeNotifications";
const Wrapper = styled.div``;
//라우팅 설정
const router = createBrowserRouter([
{
path: "/",
element: <ProtectedRoute><Layout /></ProtectedRoute>,
// 인증된 사용자에게만 Layout과 그 자식 컴포넌트를 렌더링
// Layout 컴포넌트는 다음 게시물에서 다룰 예정
children: [
{
path: "",
element: <Timeline/>,
},
{
path: "alert",
element: <LikeNotifications />,
},
{
path: "profile/:userId",
element: <Profile />,
},
{
path: "posting",
element: <Posting />,
},
{
path: "developer",
element: <Developer />,
}
],
},
{
path: "/login",
element: <Login />,
},
{
path: "/create-account",
element: <CreateAccount />,
},
]);
function App() {
const [isLoading, setLoading] = useState(true);
useEffect(() => {
const unsubscribe = auth.onAuthStateChanged(() => {
// auth.onAuthStateChanged로 인증 상태 확인
setLoading(false);
// 인증 상태를 확인한 후 로딩 상태를 종료
// 로그인이 되어있던 안되어있던 !
});
return unsubscribe;
// 구독 이벤트, 인증 상태가 변경될 때마다 실행
// 컴포넌트 언마운트 시 이벤트 리스너 해제
}, []);
return (
<Wrapper>
{isLoading ? <LoadingScreen /> : <RouterProvider router={router} />}
// 로딩 중일 때는 로딩 스크린 띄우기, 로딩 중이 아닐 때는 라우터를 렌더링하기
</Wrapper>
);
}
export default App;
728x90
반응형
'웹개발 포트폴리오' 카테고리의 다른 글
[개인 포트폴리오] [클라이밍 커뮤니티 SNS] 2. 코드 분석 <protected-route.js> (0) | 2024.12.20 |
---|---|
[개인 포트폴리오] [클라이밍 커뮤니티 SNS] 2. 코드 분석 <layout.js> (0) | 2024.12.20 |
[개인 포트폴리오] [클리이밍 커뮤니티 SNS] 1. 구상 및 완성 과정 (0) | 2024.12.19 |
[팀 포트폴리오] [Momentum 클론 웹사이트] 2. 코드 분석 <App.css> (0) | 2024.12.11 |
[팀 포트폴리오] [Momentum 클론 웹사이트] 2. 코드 분석 <App.js> (0) | 2024.12.11 |