-
Notifications
You must be signed in to change notification settings - Fork 2
코드 컨벤션
Yongjun Park edited this page Oct 21, 2023
·
3 revisions
- 웹 접근성을 준수해주세요❗️
- React 공식문서 읽기
- 네이밍은 길어도 괜찮다. 타인이 봤을 때 이해할 수 있는 표현이 더 중요하다.
- Boolean 변수는
is-
로 시작해야 한다. - 함수는 동사로 시작한다.
- 이벤트 핸들러 네이밍은 함수를 만드는 경우
handleAddButtonClick
, Prop의 경우onAddButtonClick
의 형식을 따른다. - 배열 변수는
-Array
,-List
보다-s
을 사용한다.
- 컴포넌트는
PascalCase
, 나머지의 경우camelCase
를 사용한다. - 상수가 담겨있는 파일이더라도
camelCase
를 유지한다. - 타입 파일의 경우
.d.ts
를 사용한다.
- 코드 순서 (개행으로 구분)
- 외부 hook (ex. useTheme)
- useState, useRef 등의 hook
- handler
- useEffect
- return
- 1파일 1컴포넌트를 원칙으로 한다.
- 같은 파일에 작성했으나 다른 파일로 빼지 않을 컴포넌트는 export할 메인 컴포넌트 아래에 둔다.
- 컴포넌트 내부 변수가 필요없는 로직은 최대한 컴포넌트 바깥으로 뺀다.
- 대부분의 경우 type을 사용한다.
- 컴포넌트의 Prop 타입의 경우, type ComponentProps = { ... }의 형식으로 사용한다.
- 외부 deps와 우리 파일 import 사이에는 빈 개행을 두어 구분한다.
- 상대 경로를 이용한 import는 사용하지 않는다. (반드시
@/
,@shared/
접두를 이용한다.) - type import 의 경우
import type { ... }
을 정확히 지킨다.
- default export를 지양한다. 최대한 named export를 사용한다. (파일명이 바뀌었을 때 에러를 제대로 내게 하기 위한 목적)
-
index.ts
를 두어 모아 export 하는 방식을 남용하지 않는다.ui-kit
과 같이 모아서 export하는 것이 가독성에 좋다고 판단될 때만 적절히 사용한다.
- 단순 string, number 보다 더 적절한 타입을 지정해주면 가독성과 Type Safety 유지에 좋다.
- 이벤트 핸들러는 다음의 방식으로 선언한다.
// ✅
const handleClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {
...
};
// ❌
const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {
...
};
- 단위, 에러 메시지, 경로 등을 문자로 직접 쓰지 않고 상수화한다.
- 재사용 가능한 상수는
constants
폴더에 모아둔다.
- let과 const만 사용한다. (var 사용 금지)
- 주석 없이도 이해되는 코드가 가장 좋지만, 그럴 수 없다면 주석을 달아 동료가 이해할 수 있도록 한다.
한 줄짜리 블록일 경우라도 {}를 생략하지 않고, 명확히 줄 바꿈 하여 사용한다
// ❌
if (true) return 'hello'
// ✅
if (true) {
return 'hello'
}