-
Notifications
You must be signed in to change notification settings - Fork 1
Moddy FE Convention
- const (화살표 함수형태/ rsc 컴포넌트 단축키 사용)
-
event 함수 선언형태 :
handle(Action)(Component)
ex) handleClickResetBtn
-
컴포넌트명 : PascalCase
-
non-components : camelCase
-
속성명, 변수명 : camelCase
// onClick, onSubmit <div onClick="{}" onSubmit="{}"></div>;
-
상수명 : UPPER_CASE
-
파일명 :
엘리먼트가 포함 되는 파일 →
.tsx
포함되지 않는 파일 →
.ts
- import
- function
- styled-component
- export
- img에 alt 명시
- button에 type 명시
컴포넌트 이름 + props로 명명 && 컴포넌트 선언부 바로 위에 위치시키기
ex) HeaderProps
"baseUrl": "src",
"paths": {
"@/*": ["*"],
"@images/*": ["views/@common/assets/images/*"]
}
-
src/
->@/
-
src/views/@common/assets/images/
->@images/*
- common 폴더 하위에 있는 이미지 폴더로 바로 접근할 수 있는 path
-
사용법
import imgHdprofile from '@images/img_hdprofile.png';
<img src={imgHdprofile} alt="마이페이지 프로필" />
-
에러 핸들링 :
try catch
문 사용 -
조건문 : if문보다 조건부 렌더링 & 삼항 조건 연산자 활용
-
주석
- 함수/컴포넌트 등 전체적인 내용에 대해 설명하는 코드는
/* */
사용해서 바로 윗줄 - 코드 한 줄에 대한 설명이 필요한 경우
//
를 사용해서 바로 윗줄
/* 여기에 주석! */ export defualt function Header(props) { //여기에 주석! const { a, b, c } = props; ...
- 함수/컴포넌트 등 전체적인 내용에 대해 설명하는 코드는
⇒ 1 이슈 - 1 PR
작업할 태스크에 대한 Issue 생성 → 해당 이슈에 대한 depth2 브랜치 생성 후 작업 시작
// 이슈 제목 : [ 페이지명 ] 구현내용
## 어떤 기능을 구현하나요?
## 세부 구현 태스크
- [ ]
- [ ]
- [ ]
- depth 2 (이슈 브랜치) : ___ : 구현 내용
제목 | 내용 |
---|---|
init | 브랜치 첫 커밋 |
feat | 새로운 기능에 대한 커밋 |
design | CSS 등 사용자가 UI 디자인을 변경 |
fix | 버그 수정에 대한 커밋 |
build | 빌드 관련 파일 수정에 대한 커밋 |
chore | 그 외 자잘한 수정에 대한 커밋 |
docs | 문서 수정에 대한 커밋 |
style | 코드 스타일 혹은 포맷 등에 관한 커밋 |
refactor | 코드 리팩토링에 대한 커밋 |
-
depth 1 (feature 브랜치) : Squash Merge를 활용하여 커밋 메시지 뒤에
(#이슈번호)
#을 이용해서 이슈와 연결해두면 어떤 커밋인지 파악하기 쉽다!
- 브랜치명
- main: 최종 Merge를 하는 곳
- develop : 개발할때 Merge
- feature: 기능을 개발하면서 각자가 사용할 부모 브랜치
- test: 개인 연습 브랜치
- depth 0 :
develop
- depth 1 :
feature/페이지명
- feature/SelectPage
- depth 2 :
페이지명/#이슈번호-구현기능설명
- SelectPage/#3-SelectCustomUI
develop
ㄴ feature/SelectPage
ㄴ SelectPage/#3-SelectCustomUI
-
depth 2 → depth 1 : Squash Merge
git checkout parent // parent 브랜치로 이동해서 git merge --squash child-branch // child-branch 브랜치에 대한 통합 커밋을 생성하고 parent 브랜치에 병합하기 위한 명령 git commit -m "commit message (#123)" // 통합 커밋을 생성
-
depth 1 → depth 0 : Merge
-
브랜치 삭제 자동화
- Github Setting을 통해 설정
- depth 2 (이슈 브랜치) → depth 1 (feature 브랜치)로 머지 시 자동 삭제
- develop, feature 브랜치는 Branch protection을 통해 자동 삭제로부터 보호
- Github - Discord Webhook 연동
- 진행상황 팔로업을 위해 Github Projects의 칸반보드 활용
- 이슈 생성 시, Projects→modee-web-kanban→status:Todo/InProgress 선택
- 작업 진행 전/중/후에 따라 이슈 상태 업데이트 해주세요! (Todo/InProgress/Done)
index.ts에서 svg 컴포넌트화 하여 export → 컴포넌트에서 import 시 컴포넌트처럼 불러오기
- 파일명 :
ic_arrow.svg
(snake case) - 컴포넌트명 (사용할 때) :
IcArrow.svg
(Pascal case)
-
reset
- styled-reset 을 통해 기본 css 설정 reset
- font 적용
- rem 단위를 쉽게 사용하기 위해
font-size: 10px;
선언
디자인 측에서 전달하는 스타일 가이드 참고하여 생성
- color
- fonts
- font : rem만 사용하기
- 112px → 11.2rem
- 가독성과 추후 확장을 고려하여 css 속성 간 개행 생활화 ⇒ Stylelint를 사용하여 자동 fix되도록 세팅
- border는 예외적으로 px 사용 ⇒ stylelint로 세팅 ⇒ root값이 커지면서 테두리도 같이 두꺼워지는건 대부분의 경우에 디자이너들이 원하는게 아닐거라서
-
스타일 코드와 컴포넌트 코드를 파일 분리하지 않는다.
-
모든 태그를 스타일드컴포넌트로 생성X. 재사용성이 없는 경우 html 태그를 사용해도 되며, 이때 스타일링은
&
,className
을 활용하여 상위 스타일드 컴포넌트 내에서 중첩해서 스타일링한다. -
파일을 분리하지 않고 S-dot Naming을 사용하기 위해 S 객체로 감싸서 사용
예시
const S = { CategoryList: styled.ul` background-color: ${({ theme }) => theme.colors.White}; color: ${({ theme }) => theme.colors.Grey600}; ${({ theme }) => theme.fonts.Title5}; `, SelectAllBtn: styled.button<{ isSelectAll: boolean }>` width: 100%; height: 5.8rem; padding: 0; & > p { margin-left: 3.8rem; ${({ theme }) => theme.fonts.Title5}; float: left; } ${({ isSelectAll }) => isSelectAll && css` background-color: ${({ theme }) => theme.colors.Blue}; color: ${({ theme }) => theme.colors.White}; `}; `,
- 최상위 컴포넌트 명 : '컴포넌트명'Layout (태그 종류와 무관)
- 각 태그들의 컴포넌트 명
-
div
'컴포넌트명'Box 권장 (div가 영역 그룹화의 목적이 아닐 경우, 필요에 따라 다른 네이밍 사용해도 됨. ex- 구분선을 div로 구현할 때는 그냥 Line 등으로 네이밍해도OK) -
section
'컴포넌트명'Section -
ul
'컴포넌트명'List -
li
'컴포넌트명'Item -
p
'컴포넌트명'Paragraph -
span
'컴포넌트명'Span
-