-
Notifications
You must be signed in to change notification settings - Fork 2
Coding Convention
컴포넌트 작성 방식, 네이밍 규칙, 프로젝트 폴더와 파일 구조 등 필요한것들을 정하여 일관성 있게 개발했으면 좋겠어요!
-
ASI를 이용하지 않고 세미콜론을 필수적으로 써준다. (prettier로 관리).
-
함수는 화살표 함수로만 작성한다. 만약 에디터가 JSX와 제네릭을 혼동할땐
<T extends unknown>
사용, (프로토타입 메서드 제외) -
var를 쓰지 않고, const와 let을 사용한다.(const를 주로 쓰되 변수의 값 변경이 필요할 경우 let을 쓴다.)
-
image, svg는 kebab-case 사용하여 네이밍한다.(ex. erase-check.svg).
-
변수명은 camelCase로 작성한다. (issueLabel). 만약 서버에서 카멜케이스가 아닌 형태로 내려온다면 카멜케이스로 파싱하여 사용한다.
-
.tsx 파일의 파일(폴더)명은 PascalCase를 사용한다. ex) LoginPage.tsx 단, Next.js의 pages폴더 하위의 파일명은 예외로 한다.
-
webpack alias를 이용해서 파일 절대 경로로 import, export 사용한다. src: @ 단, 같은 depth를 가진 파일을 import 할 때만 상대경로를 사용해준다. (예를 들어 style.ts같은 스타일 컴포넌트)
-
components, container, pages를 export할때는 하나의 파일(ex. index.ts)에 모아서 export한다.
-
만약 해야 할 일에 관한 주석이 필요 할 경우 // TODO:(이름) 해야 할 일을 적어준다
-
style은 emotion을 이용한 CSS in JS를 사용한다. 그리고 Component와 같은 depth에 style.ts을 만들어 관리한다.
-
변수명이 길어도 좋으니 한눈에 봐도 알아볼 수 있는 최대한 명시적인 변수명을 정해준다.
-
z-index는 변수를 이용하여 관리하되 5단위로 사용해준다.
-
컴포넌트에서 조건부 렌더링을 할때 렌더링을 하지 않아야 할 경우
return null;
을 사용해준다. -
children prop의 Type은 ReactNode로 사용한다.
-
className에 값을 할당해줄때는 무조건 classNames함수를 사용해준다. (1개의 class를 할당하거나 정적인 className을 할당해줄때도)
-
Fragment는 Props가 존재하지 않을떄는
<>/</>
형태, 존재할땐<Fragment prop=""></Fragment>
형식으로 사용해준다. -
함수 컴포넌트의 return값은 무조건 추론이 가능하니 생략해준다.
// Bad case
const ExerciseChoice = ({}: Props): ReactElement => {
return <div />;
}
// Good case
const ExerciseChoice = ({}: Props) => {
return <div />;
}
- 이벤트 핸들러를 정의할때 handle + 메서드명(동사 + 명사)로 정의한다.
const Button = ({ handleClickButton }: Props) => {
return <button onClick={handleClickButton} />
}
const Calendar = ({}: Props) => {
const handleClickDateType = () => {};
const handleOpenModal = () => {};
return (
<>
<Button handleClickButton={handleClickDateType} />
<Button handleClickButton={handleOpenModal} />
</>
);
};
- StyledComponent에 props가 존재 할 경우 아래와 같은 형식으로 작성해준다. Props에 대한 타입(제레닉)은 Styled + 컴포넌트명 + Props로 interface명을 지어준다.
interface StyledContainerProps {
size: InputSize;
}
const Container = styled.div<StyledContainerProps>`
${({size, theme}) => css`
${theme.fonts.kr.regular15};
${getInputSizeStyle(size, theme)};
color: ${theme.color.white};
display: flex;
`}
`
- 만약 props가 없는 경우 아래처럼 일반적인 StyledComponent처럼 사용해준다.
const Container = styled.div`
color: white;
`