-
Notifications
You must be signed in to change notification settings - Fork 0
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
토이프로젝트2 2조 - Hogwartalk #5
base: main
Are you sure you want to change the base?
Conversation
Design: Add QuizForm UI
Feat: Add Quiz
Design: Add Toggle UI/UX
…/Hogwartalk into T2-13-feature/dorm/socket
…/Hogwartalk into T2-13-feature/dorm/socket
T2 13 feature/dorm/socket
…info-toggle Feat: MyPage토글, FriendSearch토글 UI/UX
T2 15 feature/common component
Feat: Add Quiz
HotFix: 채팅방 인원수 무한호출 에러 해결
HotFix: 초대, 정보 모달 기숙사 정보 표시 오류 수정
Design: 전체 레이아웃 구성 및 폰트 , 테마 설정
기능개발 브랜치 생성을 위해 dev브랜치로 pullrequest한다.
Feat: login token 생성 및 localstorage 저장 기능
Fix setting & Modify pocketRequest & Add feature of lobby , role
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
전체적으로 모두 구현을 잘하시고 어려우 부분을 잘해결해 나갔던 것 같습니다.
모든 분들 자기가 맡은 역할을 잘해내셨고 고생많으셨습니다!!
이번 토이프로젝트를 통해 프론트팀 내에서 소통하는법, 업무분배, 코드 싱크 맞추기 등의 연습을 잘 해내신 것 같습니다. 앞으로 남은 실전 미니프로젝트, 파이널 프로젝트에서도 좋은 역량 잘 발휘하시길 바라겠습니다! 고생하셨습니다 :)
} | ||
|
||
export interface ResponseValue { | ||
messgae: string; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오타를 조심하세요!
import { MyChatting } from '@components/MyChatting'; | ||
import { Header } from '@components/Header'; | ||
|
||
export default function ClubChatting(props: any) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
props로 any타입을 지정하기 보다는 구조분해 할당으로 ({param})
을 받고 해당 타입을 지정해주는 게 더 좋아보입니다.
|
||
import { Dormitory } from '@components/Dormitory'; | ||
|
||
const ClubChatting = (id: any, name: any) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
id: number
, name: string
으로 보통 타입을 받을 수 있겠죠
|
||
const ClubChatting = (id: any, name: any) => { | ||
if (!id || !name) { | ||
return <div style={{ backgroundColor: 'white' }}>로딩중...</div>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
인라인 스타일은 급한 경우를 제외하고는 지양하는게 좋습니다.
return ( | ||
<> | ||
<Header /> | ||
<div |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
인라인스타일이 꼭 나쁜건 아니지만 최대한 클래스나 스타일드 컴포넌트를 이용해보아요
<styled.ParticipantsWrapper> | ||
<styled.ParticipantsGrid> | ||
{users?.map((user, index) => ( | ||
<UserItem key={index}> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
map을 돌릴때 key값에 index보다는 고유한 값이 있다면 고유한 값으로 넣어주는게 좋습니다.
ex. key={user.id}
// extraHeaders: headers, | ||
// }); | ||
const chatSocket = useMemo(() => { | ||
return io(`https://fastcampus-chat.net/chat?chatId=${chatId}`, { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
endpoint는 상수화해서 재사용하거나 은닉하는 것도 좋은 방법입니다.
import { getToken } from '@utils/service'; | ||
import UserIcon from '@assets/icon/UserIcon.svg'; | ||
|
||
type ResponseValue = any; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
정확한 타입을 지정해주는게 좋을 것 같습니다.
minute: 'numeric', | ||
}); | ||
|
||
return ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
반복되는 컴포넌트에서 마크업의 양이 많고 로직이 많이 들어가면 따로 컴포넌트를 분리하는 것 이 유지보수에 유리합니다.
} | ||
setDormitoryState(true); | ||
|
||
if (!isThere) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
정답은 아니지만, 보통 좀 더 짧고, 코드의 중첩을 줄이기 위해 조건을 만족하는 경우 함수를 빠르게 return 시키는 패턴으로 작성하면 좋습니다.
호그와톡
💁 프로젝트 정보
🌐 배포 주소
🚖 개발 팀 소개
💻 개발 스택
환경
VSC
GIT
GITHUB
개발
Next.js
REACT
FIREBASE
TYPESCRIPT
Recoil
🌙 이슈 관리 및 소통
JIRA
SLACK
NOTION
🤝 협업 방식
커밋 컨벤션, 코딩 컨벤션, 깃허브 규칙 등의 내용은 아래의 노션 페이지를 참고해주세요!
🔗 노션 페이지
🤝 요구사항 반영 여부
필수 구현 사항
✅
useState
,useReducer
를 활용한 상태 관리 구현✅
Sass
또는styled-component
를 활용한 스타일 구현✅
react
상태를 통한 CRUD 구현✅ 상태에 따라 달라지는 스타일 구현
✅
custom hook
을 통한 비동기 처리 구현✅ 유저인증 시스템(로그인, 회원가입) 구현
✅
jwt
등의 유저 인증 시스템 (로그인, 회원가입 기능)✅ 소켓을 이용한 채팅 구현
선택 구현 사항
✅
Next.js
를 활용한 서버 사이드 렌더링 구현✅
typescript
를 활용한 앱 구현🔍 팀원별 세부 구현 사항
어승준: 💬 채팅
1. 실시간 채팅
2. 클럽 채팅방 생성 동적라우팅
3. 내가 참여중인 대화방
이승연: 🌐 퀴즈, 클럽, 공통
1. 기숙사 배정 퀴즈 페이지 (회원가입)
시나리오에 따른 기숙사 배정 로직 구현
2. 클럽 페이지
채팅방 목록 조회
채팅방 생성
채팅방 참여
3. 공통
로딩 페이지
BGM(헤더)
이승현: 💬 채팅
1. 기숙사 선택 페이지
2. 채팅방
채팅방 헤더
채팅방 초대 모달
채팅방 정보 모달
배경규: 🔑 로그인/ 회원가입
로그인시 Jwt토큰 발급하여 쿠키에 저장
회원가입
모든 페이지에서 액세스 토큰 만료시 재발급
권한 없을 시(리프레시 토큰x) 로그인 페이지 유도
장문용: 📑 공통 컴포넌트
1. 헤더 제작
2. 마이페이지 토글
로그인된 사용자 정보 표시
로그인된 사용자 정보 편집하기
3. 친구목록 토글
사용자 목록 출력 (이름, 기숙사 정보, 접속 유무 표시)
4. 로그아웃
페이지 이동 & 쿠키 삭제