<라우터>
"어떤 화면을 보여줄지 관리해주는 친구"
"어떤 컴포넌트" 를 "렌더링" 할지 결정하는 역할
(화면을 표현하기 위한 조각을 그릴지 결정하는 역할!))
*컴포넌트 : 화면을 표현하기 위한 조각
*렌더링: 그린다
<훅스>
함수 컴포넌트는 상태 관리를 위해 훅스를 사용
훅스를 사용하려면 useState 함수를 사용, 인자로 [상태, 상태 관리 함수 이름] 과 같은 형태의 배열을 입력 받음
ex) useState 함수로 로그인 여부를 판단하기 위한 상태를 만들고 싶다?
이 상태를 이용해서 true/ false 에 따라 특정 컴포넌트를 보여주자!
[isLoggedIn, setIsLoggedIn] = useState(false) 와 같이 useState 함수를 사용해서 상태와 상태 관리 함수를 짝으로 만듦
isLoggedIn의 값은 setIsLoggedIn 함수만 사용해서 변경 할 수 있음
액션1 - useState 함수 사용하기
예를 들어 로그인이 되어있지 않은 상태일 때 로그인 페이지를 보여주려면?
isLoggedIn 상태를 참조해서 렌더링할 컴포넌트를 결정하면 됨
isLoggedIn 이 false면 로그인 페이지를 보여 주는 Auth 컴포넌트를 렌더링하고
isLoggedIn 이 true면 로그인 후 볼 수 있는 Home 컴포넌트를 렌더링
import { useState } from "react";
import { HashRouter as Router, Route, Switch } from "react-router-dom";
const AppRouter = () => {
const [isLoggedIn, setIsLoggedIn] = useState(false);
return (
<Router>
<switch>
<Route />
</switch>
</Router>
);
};
export default AppRouter;
액션2 - 삼항 연산자와 상태로 적절한 컴포넌트 반환하기
삼항 연산자와 isLoggedIn을 조합해서 상태의 true, false에 따라 적절한 컴포넌트를 렌더링하도록 만듦
import { useState } from "react";
import { HashRouter as Router, Route, Switch } from "react-router-dom";
import Auth from "../routes/Auth";
import Home from "../routes/Home";
const AppRouter = () => {
const [isLoggedIn, setIsLoggedIn] = useState(false);
return (
<Router>
<switch>
{isLoggedIn ? (
<Route exact path="/">
<Home />
</Route>
) : (
<Route exact path="/">
<Auth />
</Route>
)}
</switch>
</Router>
);
};
export default AppRouter;
액션3 - npm start
npm start
App 컴포넌트에서 AppRouter 컴포넌트를 랜더링 하지 않아서 APP 만 뜬다!
액션4 - App.js 수정하기
import AppRouter from "./Router";
function App() {
return <AppRouter />;
}
export default App;
return 을 Router.js에서의 AppRouter로 변경
but,,,,,,,,,,,,, 오류가 발생

그 이유는 버전이 달라서 문법이 바뀌었다
https://velog.io/@kcdoggo/Switch-is-not-exported-from-react-router-dom-%EC%97%90%EB%9F%AC
'Switch' is not exported from 'react-router-dom' 에러
react-router-dom이 버전 6로 업그레이드되면서, Switch를 더이상 지원을 안하게 됬다. Switch -> routes로 바뀜. 또한 component도 element로 바꼈다.공식문서 참조해서 코드를 조금 바꾸면 된다.
velog.io
이 분 블로그 참조해서 수정완..
<Switch> 는 <Routes>로
<Router> 는 <BrowserRouter>로 변경해주면 된다..
문법도 exact는 사용하지않고 component 대신 element를 넣어줘야한다.
import { useState } from "react";
import { BrowserRouter, Routes, Route, Link } from "react-router-dom";
import Auth from "../routes/Auth";
import Home from "../routes/Home";
const AppRouter = () => {
const [isLoggedIn, setIsLoggedIn] = useState(false);
return (
<BrowserRouter>
<Routes>
{isLoggedIn ? (
<Route path="/" element={<Home />} />
) : (
<Route path="/" element={<Auth />} />
)}
</Routes>
</BrowserRouter>
);
};
export default AppRouter;
성공!!
액션5 - isLoggedIn 변경해 보기
useState(true) 값을 주었더니 Home이 나오는걸 볼 수 있다.
'리액트 - 클론코딩' 카테고리의 다른 글
트위터 클론코딩 - 이메일, 비밀번호 인증 기능 사용해보기 (0) | 2023.05.11 |
---|---|
트위터 클론코딩 - 파이어베이스 로그인 설정하기 (0) | 2023.05.11 |
트위터 클론코딩 - 파이어베이스 로그인 준비하기 (1) | 2023.05.10 |
트위터 클론코딩 - 라우터 준비하기 (0) | 2023.05.10 |
트위터 클론코딩 - 파이어베이스의 비밀키 숨기기 (0) | 2023.05.10 |