npx create-react-app sample-app
sample-app> src>
App.css
logo.svg
reportWebVitals.js
setupTests.js 테스트할때 필요한거라 지금은 필요가 없다
App.js return() 안쪽 전체 삭제
function App() {
return (
);
}
export default App;
index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<App />
);
sample-app> public>
index.html 는 사용할껀데 주석처리된 부분은 필요가 없다
, 등등 다 삭제
이렇게만 남겨놓기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<title>React App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
logo.png
manifest.json
robots.txt
폴더 이동 먼저하고
cd sample-app
여기다가 라이브러리 설치
npm install react-router-dom
실행
npm start
react-router-dom 으로 감싸기
그래야 어떤 주소로 가면 이 페이지를 그려줘~라고 설정 해놓을 수 있음
import {RouterProvider, createBrowserRouter} from "react-router-dom";
import PageA from "./pages/pageA"; // import 자동으로 안되니 꼭 해주는게 중요!
import PageB from "./pages/pageB";
import PageC from "./pages/pageC";
const router = createBrowserRouter([
{path:'/', element:<PageA/>},
{path:'/b', element:<PageB/>},
{path:'/c', element:<PageC/>},
]);
function App() {
return (
<RouterProvider router={router}/>
);
}
export default App;
자 이제 페이지 만들러 ㄱㄱ
sample-app> src> pages 폴더 생성
sample-app> src> pages> pageA 파일 생성
const PageA = () =>{
return(
<>
<h1>page A 입니다</h1>
</>
)
}
export default PageA;
const PageB = () =>{
return(
<>
<h1>page B 입니다</h1>
</>
)
}
export default PageB;
const PageC = () =>{
return(
<>
<h1>page C 입니다</h1>
</>
)
}
export default PageC;
이제 http://localhost:3000/ 를 브라우저 주소창에 쓰면 PageA가 잘 나오는것을 확인할 수 있다.
RouterProvider 태그 안만 다시 그려진다
App 태그나 다른 RouterProvider 태그는 디자인을 안 입혀놨기때문에
실질적으로 우리 눈에 보이는건 h1 태그밖에 없다
컴포넌트가 그려졌을때 이 컴포넌트가 어떤 컴포넌트 안에 들어있는지 구조를 잘 파악하는게 중요하다