Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[17팀 석금용][Chapter1-2] 프레임워크 없이 SPA 만들기 #115

Open
wants to merge 31 commits into
base: chapter1-2
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
26b61eb
config: package-lock.json 업데이트
geum-yong Sep 30, 2024
9b59dea
feat: createVNode 함수 구현
geum-yong Sep 30, 2024
3d0bad0
feat: createElement 함수 구현
geum-yong Sep 30, 2024
9f16657
config: prettier 추가
geum-yong Sep 30, 2024
199181a
style: prettier 추가에 따른 기존 코드 포맷팅 수정
geum-yong Sep 30, 2024
d2ec469
feat: jsx 파일 템플릿 초기 세팅
geum-yong Sep 30, 2024
0b77621
feat: 로그인 함수 추가
geum-yong Sep 30, 2024
48953d2
fix: 프로필 Header 컴포넌트 오타 수정
geum-yong Sep 30, 2024
f4e49b3
feat: 프로필 수정 함수 추가
geum-yong Sep 30, 2024
b7f5ec7
Update pull_request_template.md
JunilHwang Sep 29, 2024
dd50647
feat: vNode가 0, NaN인 경우 텍스트로 리턴
geum-yong Sep 30, 2024
cbe0a60
feat: 각 page 별로 이벤트 선언 위치 수정
geum-yong Sep 30, 2024
d1b8bf7
refactor: 임시로 falsy한 값 예외처리
geum-yong Oct 1, 2024
c38595f
feat: 임시 renderElement 구현
geum-yong Oct 1, 2024
38c27bc
feat: main 기존 코드로 수정
geum-yong Oct 2, 2024
6bc7d6e
feat: renderElement 구현
geum-yong Oct 2, 2024
2b84765
refactor: renderElement.js에서 불필요한 로직 삭제
geum-yong Oct 2, 2024
33703e3
feat: eventManager 구현
geum-yong Oct 2, 2024
df006c6
refactor: 임시 테스트 통과 코드로 수정
geum-yong Oct 3, 2024
c3631b2
fix: 이벤트 위임 오류 수정
geum-yong Oct 3, 2024
d8ecf30
refactor: 불필요한 import 삭제
geum-yong Oct 3, 2024
87e50df
refactor: eventManager 로직 리팩토링
geum-yong Oct 3, 2024
828bf09
refactor: renderElement 로직 리팩토링
geum-yong Oct 3, 2024
9e0cd14
refactor: 선언형에서 화살표 함수로 수정
geum-yong Oct 3, 2024
2a35002
refactor: 컴포넌트 안에 있는 함수 외부로 위치 수정
geum-yong Oct 3, 2024
c526564
feat: createElement 로직에 style 인라인 처리 추가
geum-yong Oct 3, 2024
d3d478b
refactor: 선언형에서 화살표 함수로 수정
geum-yong Oct 3, 2024
0673909
fix: template에 잘못된 부분 수정 (2)
JunilHwang Oct 1, 2024
f752596
fix: template에 잘못된 부분 수정 (3)
JunilHwang Oct 1, 2024
a6d15ce
test: renderHTML에서 함수형 컴포넌트를 처리하는 테스트 추가
JunilHwang Oct 1, 2024
7593f2d
refactor: lib 폴더 index 리스트 추가
geum-yong Oct 3, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 53 additions & 59 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,65 +2,59 @@

### 기본과제

#### 1) 라우팅 구현:
- [ ] History API를 사용하여 SPA 라우터 구현
- [ ] '/' (홈 페이지)
- [ ] '/profile' (프로필 페이지)
- [ ] '/404' (Not Found 페이지)
- [ ] 각 라우트에 해당하는 컴포넌트 렌더링 함수 작성
- [ ] 네비게이션 이벤트 처리 (링크 클릭 시 페이지 전환)

#### 2) 사용자 관리 기능:
- [ ] LocalStorage를 사용한 간단한 사용자 데이터 관리
- [ ] 사용자 정보 저장 (이름, 간단한 소개)
- [ ] 로그인 상태 관리 (로그인/로그아웃 토글)
- [ ] 로그인 폼 구현
- [ ] 사용자 이름 입력 및 검증
- [ ] 로그인 버튼 클릭 시 LocalStorage에 사용자 정보 저장
- [ ] 로그아웃 기능 구현
- [ ] 로그아웃 버튼 클릭 시 LocalStorage에서 사용자 정보 제거

#### 3) 프로필 페이지 구현:
- [ ] 현재 로그인한 사용자의 정보 표시
- [ ] 사용자 이름
- [ ] 간단한 소개
- [ ] 프로필 수정 기능
- [ ] 사용자 소개 텍스트 수정 가능
- [ ] 수정된 정보 LocalStorage에 저장

#### 4) 컴포넌트 기반 구조 설계:
- [ ] 재사용 가능한 컴포넌트 작성
- [ ] Header 컴포넌트
- [ ] Footer 컴포넌트
- [ ] 페이지별 컴포넌트 작성
- [ ] HomePage 컴포넌트
- [ ] ProfilePage 컴포넌트
- [ ] NotFoundPage 컴포넌트

#### 5) 상태 관리 초기 구현:
- [ ] 간단한 상태 관리 시스템 설계
- [ ] 전역 상태 객체 생성 (예: 현재 로그인한 사용자 정보)
- [ ] 상태 변경 함수 구현
- [ ] 상태 업데이트 시 관련 컴포넌트 리렌더링

#### 6) 이벤트 처리 및 DOM 조작:
- [ ] 사용자 입력 처리 (로그인 폼, 프로필 수정 등)
- [ ] 동적 컨텐츠 렌더링 (사용자 정보 표시, 페이지 전환 등)

#### 7) 기본적인 에러 처리:
- [ ] 잘못된 라우트 접근 시 404 페이지로 리다이렉션
- [ ] 로그인 실패 시 에러 메시지 표시

### 심화과제

#### 1) 고급 라우팅
- [ ] 라우트 가드 구현
- [ ] 로그인 상태에 따른 접근 제어
- [ ] 비로그인 사용자의 특정 페이지 접근 시 로그인 페이지로 리다이렉션

#### 2) 고급 이벤트 처리

- [ ] 이벤트 위임 활용
#### 1) createVNode

- [ ] 올바른 구조의 vNode를 생성해야 한다
- [ ] 여러 자식을 처리해야 한다
- [ ] 자식 배열을 평탄화해야 한다
- [ ] 중첩 구조를 올바르게 표현해야 한다
- [ ] JSX로 표현한 결과가 createVNode 함수 호출과 동일해야 한다

#### 2) createElement

- [ ] 문자열 입력에 대해 텍스트 노드를 생성해야 한다
- [ ] 숫자 입력에 대해 텍스트 노드를 생성해야 한다
- [ ] null 입력에 대해 빈 텍스트 노드를 생성해야 한다
- [ ] false 입력에 대해 빈 텍스트 노드를 생성해야 한다
- [ ] 배열 입력에 대해 DocumentFragment를 생성해야 한다
- [ ] 함수 컴포넌트를 처리해야 한다
- [ ] 올바른 속성으로 요소를 생성해야 한다
- [ ] 이벤트 리스너를 연결해야 한다
- [ ] 중첩된 자식 요소를 올바르게 처리해야 한다
- [ ] 깊게 중첩된 구조를 처리해야 한다
- [ ] 혼합 콘텐츠(텍스트와 요소)를 처리해야 한다
- [ ] 빈 자식 배열을 처리해야 한다
- [ ] undefined 자식을 무시해야 한다
- [ ] 불리언 속성을 처리해야 한다
- [ ] 데이터 속성을 처리해야 한다

#### 3) 컴포넌트를 jsx로 정의하여 사용했는지 확인하기
- [ ] Post
- [ ] PostForm
- [ ] Header
- [ ] Navigation
- [ ] Footer
- [ ] HomePage
- [ ] LoginPage
- [ ] NotFoundPage
- [ ] ProfilePage
- [ ] HomePage를 렌더링 했을 때 html 문자열로 잘 변환되는지 확인

### 심화 과제

#### 1) Diff 알고리즘 구현

- [ ] 초기 렌더링이 올바르게 수행되어야 한다
- [ ] diff 알고리즘을 통해 변경된 부분만 업데이트해야 한다
- [ ] 새로운 요소를 추가하고 불필요한 요소를 제거해야 한다
- [ ] 요소의 속성만 변경되었을 때 요소를 재사용해야 한다
- [ ] 요소의 타입이 변경되었을 때 새로운 요소를 생성해야 한다

#### 2) 이벤트 위임 구현

- [ ] 이벤트가 위임 방식으로 등록되어야 한다
- [ ] 동적으로 추가된 요소에도 이벤트가 정상적으로 작동해야 한다
- [ ] 이벤트 핸들러가 제거되면 더 이상 호출되지 않아야 한다

## 리뷰 받고 싶은 내용

Expand Down
8 changes: 8 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
__tests__
*.md
.babelrc
vite.config.js

# Ignore GitHub workflow files
.github/workflows/**/*.yml
.github/workflows/**/*.yaml
7 changes: 7 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"singleQuote": true,
"trailingComma": "all",
"printWidth": 120,
"tabWidth": 2,
"semi": true
}
Loading
Loading