리액트는 라이브러리로 분류되며, 개발 방법의 자율성이 높음.
하지만 시간이 지나면서 프레임워크의 특성을 일부 포함하며 진화
라이브러리 vs 프레임워크 비교
라이브러리: 떡볶이 → 떡, 고추장, 오뎅 등등 다 직접 조합해서 만드는 것
프레임워크: 밀키트
다만, 최근 유지보수가 중단(가장 최근 업데이트 2022년)되었고, 실무에서는 거의 미사용
설치
npx create-react-app .
실행
npm start
localhost:3000에 기본 페이지가 표시npm start는 npm run start의 축약형Vite는 빠르고 가벼운 빌드 도구로, 최신 트렌드를 반영한 개발 환경 제공. SWC를 사용해 더욱 빠른 컴파일 속도 보유
설치
npm create vite@latest .
SWC
설치 시 다음과 같은 프롬프트 표시
❯ JavaScript
JavaScript + SWC
TypeScript
TypeScript + SWC
SWC(Speedy Web Compiler) 옵션 선택 시 Babel보다 빠른 컴파일 속도를 제공하는 프로젝트 생성
SWC란?
국내 개발자가 만든 Rust 기반 컴파일러로, 버셀에서 채용
빠른 성능과 효율적인 코드 최적화가 특징. Vite의 기본 트랜스파일러로 사용
노드모듈 없이 기본 구조만 포함, npm i로 설치 후 프로젝트 시작
실행
npm run dev
localhost:5173에서 애플리케이션 실행리액트는 JSX(JavaScript + XML)라는 독특한 문법을 사용해 HTML과 유사한 방식으로 UI 작성
<br />)className, htmlFor){ /* 주석 내용 */ } 형태로 작성for 대신 htmlFor)권장 규칙
JSX 예제
export default function App() {
return (
<div>
<h1>Hello, React JSX!</h1>
<h2>Create Element</h2>
</div>
);
}
리액트의 두 가지 엘리먼트 생성 방식
// createElement 예시
<div id="root"></div>
// 기본 예제
//createElement(태그명, 속성(객체형태), 콘텐츠)
const element = React.createElement("h1", { id: "title" }, "Hello, React!");
// ReactDOM.render로 화면에 컴포넌트를 렌더링
ReactDOM.render(element, document.getElementById('root'));
// 중첩 예제
//createElement(태그명, 속성(객체형태), 콘텐츠1, 콘텐츠2, 콘텐츠3)
const h1El = React.createElement("h1", null, "Hello, React!");
const h2El = React.createElement("h2", null, "Create Element");
const main = React.createElement("main", { id: "main" }, h1El, h2El);
ReactDOM.render(main, document.getElementById('root'));
export default와 export의 차이export default: 파일당 하나만 사용 가능하며, 원하는 이름으로 임포트 가능export: 여러 항목을 내보낼 수 있으며, 임포트 시 정확한 이름을 사용해야 함예제
// 파일1.jsx
export default function Component() {
return <div>컴포넌트</div>;
}
// 임포트
import Component from './파일1';
// 파일2.jsx
export function Component1() {
return <div>컴포넌트1</div>;
}
export function Component2() {
return <div>컴포넌트2</div>;
}
// 임포트
import { Component1, Component2 } from './파일2';
Vite로 생성된 리액트 프로젝트 구조
my-react-app/
├── node_modules/ # 종속성 모듈들 (건드릴 일 없음)
├── public/ # 정적 파일들 (빌드 도구에 영향을 받지 않는 파일)
│ └── index.html # 메인 HTML 파일
├── src/ # 소스 코드
│ ├── App.jsx # 메인 컴포넌트
│ ├── main.jsx # 진입점
│ ├── index.css # 전역 스타일
│ └── assets/ # 이미지 및 자원 파일 (public과 달리 빌드 영향을 받음)
├── package.json # 프로젝트 설정 및 종속성 정보 (중요)
└── vite.config.js # Vite 설정 파일 (건드릴 일 없음)
└── .gitignore # Git 무시 파일 목록
필요 없는 파일 삭제
index.css와 App.css 등 사용하지 않는 파일 제거.gitignore 설정 추가
package-lock.json, .env, node_modules 등 커밋 제외할 파일 추가node_modules
dist
dist-ssr
*.local
package-lock.json
.env