Session 2 (React)의 실습 문제들입니다. 각 폴더에는 학습 주제에 맞는 실습 문제와 솔루션이 포함되어 있습니다.
exercises/
├── 01-react-basics-practice/ # React 기초 실습
├── 02-hooks-practice/ # Hooks와 State 실습
└── 03-api-practice/ # API 통신 실습
각 실습 폴더의 README.md에 있는 명령어로 Vite 프로젝트를 생성합니다.
npm create vite@latest [project-name] -- --template react-ts
cd [project-name]
npm install
npm run dev실습 폴더의 .tsx와 .css 파일을 프로젝트의 src/components/ 디렉토리에 복사합니다.
# 예시: 01-react-basics-practice의 파일들 복사
cp 01-react-basics-practice/*.tsx [project-name]/src/components/
cp 01-react-basics-practice/*.css [project-name]/src/components/각 컴포넌트 파일의 주석에 있는 테스트 코드를 App.tsx에 추가하여 테스트합니다.
각 파일의 TODO 주석을 참고하여 코드를 작성합니다.
파일 하단에 있는 솔루션과 비교하며 학습합니다.
디렉토리: 01-react-basics-practice/
-
ProfileCard - 사용자 프로필 카드
- Props 사용
- 선택적 Props
- 조건부 렌더링
- 기본값 처리
-
ProductList - 상품 목록
- 배열 Props
- 리스트 렌더링 (map)
- 조건부 스타일링
- 카테고리별 색상 배지
디렉토리: 02-hooks-practice/
-
CounterWithHistory - 히스토리가 있는 카운터
- useState 사용
- 배열 State 조작
- 이벤트 핸들링
-
TodoListWithFilter - 필터링 Todo 목록
- 여러 State 관리
- 배열 CRUD
- 필터링 로직
- 통계 계산
디렉토리: 03-api-practice/
-
UserList - 사용자 목록
- fetch API 사용
- useEffect Hook
- 로딩/에러/데이터 상태
- 조건부 렌더링
-
PostManager - 게시글 관리
- CRUD 구현
- POST 요청
- DELETE 요청
- 폼 처리
- React 18
- TypeScript
- Vite
- CSS3
-
01-react-basics-practice
- React 기본 개념 익히기
- 컴포넌트, Props, 렌더링
-
02-hooks-practice
- State 관리 익히기
- useState, useEffect
- 배열/객체 State 조작
-
03-api-practice
- 실전 API 통신
- 로딩/에러 처리
- CRUD 구현
-
todo-app (종합 프로젝트)
- 모든 개념 통합
- 완전한 애플리케이션 구현
-
먼저 직접 구현해보기
- TODO 주석을 보고 스스로 구현
- 막히면 힌트 확인
- 최대한 스스로 해결 시도
-
솔루션과 비교하기
- 자신의 코드와 솔루션 비교
- 더 나은 방법이 있는지 확인
- 다른 접근 방식 학습
-
커스터마이징하기
- 기본 기능에 추가 기능 구현
- 스타일 개선
- 에러 처리 강화
-
디버깅 연습
- 브라우저 개발자 도구 활용
- console.log로 데이터 확인
- React DevTools 사용
실습을 모두 완료했다면:
- 종합 프로젝트:
../todo-app/디렉토리의 완전한 Todo 앱 구현 - 추가 기능: 각 실습에 자신만의 기능 추가
- 포트폴리오: 완성된 프로젝트를 GitHub에 업로드
- 심화 학습: React Router, Context API, 상태 관리 라이브러리
1. CORS 에러
- JSONPlaceholder API는 CORS를 허용하므로 문제 없음
- 다른 API 사용 시 프록시 설정 필요
2. TypeScript 에러
- 타입을 정확히 정의했는지 확인
- any 타입 사용은 지양
3. 무한 렌더링
- useEffect의 의존성 배열 확인
- State 업데이트 무한 루프 주의
Happy Coding! 🚀