Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
734d1b7
Feat: 프로젝트 기본 세팅 완료
rmdnps10 Sep 25, 2023
988c027
Feat: atom 컴포넌트 디자인 작업 및 폰트 추가
rmdnps10 Sep 25, 2023
18e872d
Feat: 컴포넌트 스타일링 완료
rmdnps10 Sep 26, 2023
4357a3d
유저 토글과 로컬 스토리지 값 저장 구현
rmdnps10 Sep 26, 2023
5f7ea98
Feat: 메시지 추가 기능 구현
rmdnps10 Sep 26, 2023
c35a68c
Feat: 메시지 보낼 시 하단으로 스크롤 이동하기 구현
rmdnps10 Sep 26, 2023
e6d2a46
Fix: 텍스트 길어질 시 ChatBubble 깨짐 현상 해결
rmdnps10 Sep 26, 2023
0135452
Refactor: hooks 폴더에 함수 추가
rmdnps10 Sep 26, 2023
50b7f79
Feat: 화면 랜더링 시 Input으로 포커스 이동
rmdnps10 Sep 26, 2023
e6b5017
Refactor: 타입스크립트로 코드 리팩토링 시작
rmdnps10 Sep 26, 2023
eeafdd1
Fix: 띄어쓰기없이 입력 시 깨지는 오류 해결
rmdnps10 Sep 27, 2023
6794700
Feat: 메시지 입력 적을 때 정렬 변경
rmdnps10 Sep 27, 2023
d620774
Refactor: 타입스크립트 형식으로 코드 리팩토링 완료
rmdnps10 Sep 29, 2023
ac694d6
Chore: 주석 추가
rmdnps10 Sep 29, 2023
33e9afa
Design: 아이콘 중앙 정렬되게 변경
rmdnps10 Sep 29, 2023
d8bbe65
Style: 더미 리스트 추가
rmdnps10 Sep 29, 2023
c69855a
Fix: 배포 관련 문제로 인한 images 이름 변경
rmdnps10 Sep 29, 2023
5f10abb
Fix: 리다이렉트 시 Page Not found 오류 해결 시도1
rmdnps10 Sep 29, 2023
8ed5126
HOTFIX: 아이콘 중앙 정렬
rmdnps10 Sep 30, 2023
0b6e043
Docs: Readme 파일 업데이트
rmdnps10 Oct 1, 2023
b141322
Feat: 페이지 라우팅 추가
rmdnps10 Oct 5, 2023
bd96d45
Refactor: 디자인 패턴 단위 페이지 별 폴더 추가
rmdnps10 Oct 9, 2023
cab5be4
Feat: 채팅방 스타일링 완료
rmdnps10 Oct 9, 2023
878a2be
Feat: 연락처 페이지 컴포넌트 스타일링 완성
rmdnps10 Oct 10, 2023
51df663
Feat: 프로필 페이지 스타일링 완료
rmdnps10 Oct 10, 2023
41f0d96
Fix: HomeNav와 ChagNav 스타일링 통일
rmdnps10 Oct 11, 2023
f4ab5fc
Feat: 푸터 메뉴 클릭 시 라우팅 구현
rmdnps10 Oct 11, 2023
8efe577
Feat: Chat페이지에서 ChatItem의 id에 따른 내비게이션 구현
rmdnps10 Oct 28, 2023
41073ef
Feat: 채팅방 별로 따로 기존의 채팅 기능 구현
rmdnps10 Oct 28, 2023
32e7d1d
Feat: 채팅방에서 마지막으로 남긴 메시지 채팅 목록에 띄우는 것 구현
rmdnps10 Oct 28, 2023
e6b2dd9
Feat: 유저 토글에 따른 메시지 읽음 처리 구현
rmdnps10 Oct 28, 2023
1b2312c
Feat: 채팅 목록에 User1입장에서 읽지 않은 메시지의 개수 표시 구현
rmdnps10 Oct 28, 2023
f639a89
Fix: 채팅 목록에서 이전 메시지가 존재하지 않을 때 스타일 무너짐으로 인해 카운트 컴포넌트에 고정된 height값 선언
rmdnps10 Oct 28, 2023
b5e86a6
Fix: 사파리 브라우저에서 연락처 설명창 중앙정렬되는 문제 해결
rmdnps10 Oct 29, 2023
493d559
Fix: 사파리 브라우저에서 연락처 설명창 중앙정렬되는 문제 해결 시도2
rmdnps10 Oct 29, 2023
6bb8d14
Feat : 연락처 페이지의 ContactItem에 더미데이터 추가
rmdnps10 Oct 31, 2023
4fd1e13
Feat: HomeNav에서 검색여부상태관리 추가 및 검색 상태에 따른 컴포넌트 추가
rmdnps10 Oct 31, 2023
a78dd48
Feat: isSearch, userInput 전역변수 선언
rmdnps10 Nov 1, 2023
c89be59
Feat: chat페이지에서 검색 기능 추가
rmdnps10 Nov 1, 2023
9b1e262
Feat: 검색 화면을 SearchContainer로 분리하여 검색 상태 여부에 따라 랜더링
rmdnps10 Nov 1, 2023
0ff8b4a
Feat: 검색 시 예외처리
rmdnps10 Nov 1, 2023
6575581
Feat: 채팅방에서 클릭 가능한 요소에 cursor:pointer 추가
rmdnps10 Nov 1, 2023
6ed9113
Feat: 채팅 목록에서 새로 온 메시지 개수가 0일 때 예외처리
rmdnps10 Nov 1, 2023
1320b76
Feat: 검색 중일 때 BottomNavigation 아이콘 클릭하면 검색 상태가 뜨지 않게 하기
rmdnps10 Nov 1, 2023
c16d443
Fix: 랜더링 관련한 오류들 useEffect와 key prop 전달함으로써 해결
rmdnps10 Nov 1, 2023
3cedc33
Feat: 검색 활성화 시에 input에 포커스 부여
rmdnps10 Nov 3, 2023
b561a87
Refactor: 타입이 선언되지 않은 변수에 대한 타입 설정 및 주석 추가
rmdnps10 Nov 3, 2023
d9d9333
Chore: dummyList에 대한 주석 추가
rmdnps10 Nov 3, 2023
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
82 changes: 36 additions & 46 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,66 +1,56 @@
# 서론
# 4주차 미션: React-Messenger 💌

안녕하세요 🙌🏻 18기 프론트 운영진 김문기입니다. 이번 미션에서는 드디어 투두리스트에서 벗어나 새로운 프로젝트인 **messenger** 만들기를 진행합니다.
## 서론

이번주는 특별히 **디자이너와의 협업**으로 진행되는 미션입니다. 디자이너분께서 열심히 리디자인 한 메신저 프로젝트를 여러분들께서 구현해주시면 됩니다.
안녕하세요 🙌🏻 프론트엔드 운영진 김문기입니다.

동시에, 이번주부터는 새로 **TypeScript**를 적용해보려고 합니다.
다들 저번주 미션은 어떠셨나요? 이번주에는 저번 과제를 확장하여 보다 더 완성도 높은 메신저 서비스를 만들어 봅시다.

프로젝트의 규모가 커지게 될 수록, 컴포넌트가 가지는 props의 종류 또한 다양해지게 됩니다. 무지성 코딩을 하다보면 가끔 이 props의 구성과 이름, 어떤 타입이 들어가야 하는지 헷갈리기 마련이죠. 보통 그럴 때 다시 컴포넌트 정의 부분으로 돌아가 props의 구성을 보고 오곤 합니다.
이번주 과제의 목표는 React에서 **Routing**을 구현하는 방법과 **상태를 관리**하는 방법에 대해 익숙해지는 것입니다. 해당 부분을 잘 고려하시면서 미션을 수행해 주세요!

하지만 이럴 때, typescript를 적용한다면 컴포넌트의 구성과 그 이름, 심지어 타입까지 한번에 자동완성으로 편리하게 관리할 수 있고, 생산성이 증대되겠죠.
또한, 이번주에는 디자이너 측에서 QA를 전달해주실 예정입니다. 전달받은 QA에 대해 디자이너와 소통 후, 이를 고쳐보시는 과정도 수행해주세요!

또한, **React Hooks**에 조금 더 익숙해지는 것을 목표로 합니다. 여러 Hook들이 있지만 그 중에서도 `useState`, `useEffect`, `useRef`를 중점적으로 사용해 보는 미션인데요, React를 사용하면서 굉장히 자주 쓰이는 Hook들이기 때문에 이 부분을 집중적으로 공부해 보아요!
그럼 이번주도 파이팅입니다 😤

그럼 이번 미션도 파이팅입니다!!🎉
## 미션

# 미션
### 미션 목표

## Key Questions

- JavaScript를 사용할때에 비해 TypeScript를 사용할 때의 장점은 무엇인가요?
- 디자이너로부터 전달받은 피그마 링크 혹은, 피그마 캡처본
- 컴포넌트를 분리한 기준은 무엇인가요?
- 디자인 시스템을 적용하면서 느낀 점은 무엇인가요?
- 디자이너와 소통하며 느낀점은 무엇인가요?
- SPA의 개념을 이해하고, 그에 따른 라우팅을 구현합니다.
- 디자이너로부터 QA를 전달받고, 이에 대한 대응합니다.
- React에서 사용하는 상태 관리 방법에 익숙해집니다.
- UI 컴포넌트의 중복을 줄여 봅니다.
- 코드를 확장/재사용/리팩토링하는 방법을 이해합니다.

## 미션 목표
### 기한

- TypeScript를 사용해봅시다.
- useState로 컴포넌트의 상태를 관리합니다.
- useEffect와 useRef의 사용법을 이해합니다.
- styled-components를 통한 CSS-in-JS 및 CSS Preprocessor의 사용법에 익숙해집니다.
2023년 11월 3일 금요일 (기한 엄수!)

## 기한
### 필수 요건

2023년 9월 29일 금요일
- 친구 목록 페이지, 채팅 목록 페이지, 설정 페이지 세 부분으로 구성합니다.
- 채팅 목록을 누르면 3주차 미션에서 구현했던 채팅방으로 이동합니다.
- 검색 기능을 추가하여 검색한 내용과 일치하는 이름을 가진 사용자만 화면에 표시합니다.
- (선택) 각자 메신저에 추가하고 싶거나, 구현하고 싶은 기능 마음껏 구현합니다. ✨
- Custom hooks를 통해 중복되는 로직을 줄입니다.

## 필수 구현 기능
### 선택 사항

- 피그마를 보고 [결과화면](https://3th-fb-messenger.netlify.app)과 같이 구현합니다.
- 디자인 시스템을 구축합니다.
- 채팅방 상단의 프로필을 클릭하면 사용자를 변경할 수 있습니다.
- 메세지를 보내면 채팅방 하단으로 스크롤을 이동시킵니다.
- 메세지에 유저 정보(프로필 사진, 이름)를 표시합니다.
- user와 message 데이터를 json 파일에 저장합니다.
- UI는 **반응형을 제외**하고 피그마파일을 따라서 진행합니다.
- Recoil, Redux 등의 상태 관리 라이브러리를 적용해 봅니다.
- Base UI component system을 통해 UI 컴포넌트의 코드 재사용성을 높입니다.

### 추가 구현 기능

- 더블 클릭 하면 감정표현을 추가합니다.
- 그 외 추가하고 싶은 기능이 있다면 마음껏 추가해 주세요!
## Key Questions

참고로 이번 과제는 다음주까지 이어지는 과제이므로 **확장성**을 충분히 고려해 주세요. 참고로 **4주차 과제에서는 유저 및 기능 추가와 Routing을** 진행합니다. 이를 위해 [recoil](https://recoiljs.org/ko/)이나 [redux](https://ko.redux.js.org/introduction/getting-started/)를 이용한 상태관리를 미리 해보시는 것을 추천합니다!! 모두 공식문서 많이 읽어보시고 자신만의 상태관리 조합도 찾아보면 재밌을 거에요 XD
- 디자이너로부터 받은 QA 목록
- QA 반영한 커밋(or 브랜치) 링크 (커밋 분리 필수!!!)
- Routing
- SPA
- 상태관리

## 링크 및 참고자료

- [React docs - Hook](https://ko.reactjs.org/docs/hooks-intro.html)
- [React의 Hooks 완벽 정복하기](https://velog.io/@velopert/react-hooks#1-usestate)
- [useEffect 완벽 가이드](https://overreacted.io/ko/a-complete-guide-to-useeffect/)
- [코딩 컨벤션](https://ui.toast.com/fe-guide/ko_CODING-CONVENTION)
- [타입스크립트 핸드북](https://joshua1988.github.io/ts/intro.html)
- [리액트 프로젝트에서 타입스크립트 사용하기 (시리즈)](https://velog.io/@velopert/series/react-with-typescript)
- [디자인 시스템 구축기](https://yozm.wishket.com/magazine/detail/1830/)
- [[영상] : 컴포넌트에 대한 이해](https://www.youtube.com/watch?v=21eiJc90ggo)
- [Styled Component로 디자인 시스템 구축하기](https://zaat.dev/blog/building-a-design-system-in-react-with-styled-components/)
- [ts 절대경로 설정하기](https://tesseractjh.tistory.com/232)
- [React Router v6 튜토리얼](https://velog.io/@velopert/react-router-v6-tutorial)
- [(선택) react-router v6에서는 어떤 것들이 변했을까?](https://blog.woolta.com/categories/1/posts/211)
- [React 상태 관리 가이드](https://www.stevy.dev/react-state-management-guide/)
- [Flux 패턴이란?](https://velog.io/@huurray/React%EC%9D%98-%ED%83%84%EC%83%9D%EA%B3%BC-Flux-%ED%8C%A8%ED%84%B4%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC)
- [useReducer](https://www.daleseo.com/react-hooks-use-reducer/)
Loading