티스토리 뷰
폴더 구조
저는 폴더 전체 구조를 잡을 때 apis, assets, pages, components, styles 폴더로 나누고, 그 안에 index.js 파일로 관리합니다.
pages 폴더에는 말 그래도 웹에 띄우는 페이지 단위가 들어갑니다.
components 폴더에는 페이지 안에 컴포넌트로 구성될 요소들이 들어갑니다. 컴포넌트로 따로 빼놓으면 여러 페이지에서 해당 컴포넌트를 재사용할 수 있기 때문에 분리시키는 게 좋습니다.
assets 폴더에는 image, video, font 등을 저장합니다.
apis 폴더에는 서버와의 통신에 필요한 get, post, put, delete api 구조의 틀을 잡아놓고 사용합니다.
styles 폴더에는 css 파일들을 관리합니다.
얼마 전 IT 연합 학회에서 게시판 고도화 프로젝트를 했었는데, 그때 구축한 폴더 구조는 아래와 같습니다.
│ App.css
│ App.js
│ App.test.js
│ index.css
│ index.js
│ logo.svg
│ reportWebVitals.js
│ setupTests.js
│
├─api
│ cookie.js
│ deleteApi.js
│ getApi.js
│ index.js
│ postApi.js
│ putApi.js
│
├─assets
│ └─images
│ Logo.svg
│ search.png
│ search.svg
│
├─components
│ Editor.js
│ index.js
│ LoginForm.js
│ SearchBar.js
│ SignupForm.js
│
├─pages
│ Board.js
│ Home.js
│ index.js
│ Login.js
│ Logout.js
│ NotFound.js
│ PostDetail.js
│ PostModify.js
│ PostWrite.js
│ Signup.js
│
└─styles
Board.css
Login.css
PostDetail.css
Write.css
각 폴더마다 존재하는 index.js 파일에는 해당 폴더마다 export 하는 컴포넌트를 관리합니다.
예를 들어 상단의 components/index.js 의 내용은 다음과 같이 components 폴더 내의 파일들의 export를 관리합니다.
export { default as SignupForm } from "./SignupForm";
export { default as LoginForm } from "./LoginForm";
export { default as Editor } from "./Editor";
export { default as SearchBar } from "./SearchBar";
그러면 다른 페이지에서 해당 컴포넌트를 사용하려고 import 할 때, 아래와 같이 import 합니다.
import { LoginForm } from '../components';
App.js 에서 라우팅 설정
폴더들을 구성한 뒤, 최상단의 App.js에서 해당 페이지들과 path를 매핑시켜 라우팅 설정을 해줍니다.
npm install react-router-dom
<div className="App">
<Routes>
<Route path="/" exact={true} element={<Home />} />
<Route path='/login' element={<Login />} />
<Route path='/signup' element={<Signup />} />
<Route path='/postdetail' element={<PostDetail />} />
<Route path='/postlist' element={<PostList />} />
<Route path='/write' element={<PostWrite />} />
<Route path='*' element={<NotFound />} />
</Routes>
</div>
** App.js 까지 할거 다 했는데 왜 안되지? 했을 때 이 코드를 추가하세요.
src 폴더 아래의 index.js 에 BrowerRouter를 import 하고,
<APP /> 를 <BrowserRouter> 태그로 감싸줍니다.
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from 'react-router-dom';
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById('root')
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
'프로그래밍 > React' 카테고리의 다른 글
[React] Heroku 배포 시 이슈 정리 (경험 기록) (0) | 2022.08.15 |
---|---|
[Redux 기초 공부] (0) | 2022.08.04 |
[React TypeScript] Naver Map API 적용 - 내 위치, 위경도로 마커 찍기, open api CORS 에러 (0) | 2022.04.30 |
[React] video 삽입하기, Public 폴더 수정 후 해당 파일 접근 url 사용법 (0) | 2022.04.26 |
useState 비동기 문제 - useEffect로 해결하기 + Email Format/Validation Check 코드 (2) | 2022.03.02 |
- Total
- Today
- Yesterday
- 병돌리기구현
- partyrock생성
- partyrock무료
- 정적 웹페이지 배포
- ChatGPT
- vscode easycode
- 오블완
- BOJ
- 알고리즘
- 파이썬
- partyrock앱
- aws생성형ai
- 코딩테스트
- S3배포
- SpacewBetween
- React native 작동 원리
- partyrock
- awsgenai
- 생성형AI
- 정적 웹사이트 배포
- AWSBedrock
- 티스토리챌린지
- PYTHON
- genaiapp
- S3 403 forbidden
- easycode chatGPT
- 백준
- easycode
- 술자리병돌리기게임
- partyrock사용볍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |