-
Notifications
You must be signed in to change notification settings - Fork 100
Frontend Code Convention
Kimsanglok edited this page Nov 9, 2022
·
13 revisions
-
Type
- 선언위치
- 상수관리
- type vs interface
- component props
- proptypes
-
CSS
- color
- 크기단위
- Css 순서
- media 관리
-
Naming
- 활성화 상태에 관한 네이밍
- Box, Wrapper, container
-
React
- ts, tsx 파일확장자 관리
- React. vs 그냥 import
- react event vs react event handler
- 공용으로 사용되는 타입의 경우, types 폴더 하위에 선언한다.
그 외 타입은 파일 상단에 선언한다.
분리의 필요성이 있을 때(ex. 타입이 너무 많은 경우 ) [filename].types.ts 파일로 가장 가까운 경로에 선언한다.
- 상수는 const assertion을 사용한다
const object = {...} as const;
- interface가 아닌 type alias만을 사용한다.
- 타입스크립트 버전업에 따라서 기존에 있었던 type alias 문제점이 개선되었기에 type alias로 interface 역할까지 가능하다.
- 선언 병합에서 차이가 존재하기에, 선언 병합이 필요한 상황에는 interface를 사용한다.
- type alias가 interface에 비해 상대적으로 지원하는 타입의 형식이 많다.
- 컴포넌트 props의 타입선언
type ComponentProps = {
...
};
const Component = ({ a, b }: ComponentProps) => {
...
};
- 일반함수에 대한 타입선언 암묵적 추론이 가능한 경우는 return 타입을 명시하지 않아도 된다.
const sum = (a: number, b: number) => { ... }
- proptype는 사용하지 않는다. 이미 js로 작성된 파일에 관해서는 ts 마이그레이션 과정 중 점진적으로 제거하도록 한다.
타입스크립트를 이용하여 대부분의 타입 에러를 컴파일 시 확인할 수 있다.
proptypes와 타입스크립트는 유사한 역할을 수행하고 있고, 동시에 사용 시 유지 보수가 힘들어진다.
- —[color name]-[color layer] 형식을 사용한다. color layer는 색상의 차이를 구분하기 위해 표시되며, 001부터 1씩 올라가는 단계별 지정이다.
--gray-001 : #ddd;
- 1rem은 16px로 사용한다.
아래는 각 css 속성에서 어떤 크기단위를 사용할지를 명시한 내용입니다. - px
- border-radius
- box shadow
- rem
- width
- height
- margin
- padding
- gap
- grid-gap
- font-size
명시되지 않은 속성에 대해서는 px, rem을 모두 사용할 수 있습니다.
--pc-main-width: 800px;
--pc-main-width-narrow: 512px;
를 사용합니다.
모바일의 경우 --pc-main-width-narrow를 기준으로 반응형으로 작성합니다.
!업데이트 필요
현재상태
```
--tooltip-z-index: 1000;
--tooltip-dimmed-z-index: 999;
--header-z-index: 998;
--nav-z-index: 997;
```
- 유사한 속성들을 가까이 작성합니다.
- 필요하다면 개행을 통해 구분해주도록 합니다.
.test{
display: flex;
flex-direction: column;
align-items: center;
border: 1px solid var(--gray-003);
border-radius: 0.25rem;
box-shadow: 1px;
text-align: center;
font-size: 2rem;
cursor: pointer;
...
}
- active : 유저의 동작이 개입되지 않을 때
- selected : 유저의 동작(선택)이 개입될 때
- Box를 사용합니다.
기존에 wrapper와 container로 작성 된 경우 해당 파일 작업시 Box로 변경 후 제거하도록 합니다.
- get의 경우
fetch[도메인]
- post의 경우
post[도메인]
- patch의 경우
patch[도메인]
을 화살표함수를 이용해 선언합니다.
const fetchAssignment = () => {...}
const postAssignment = () => {...}
const patchAssignment = () => {...}
- jsx가 포함된 경우 tsx, 포함되지 않은 경우 ts로 작성합니다.
파일확장자만 읽더라도 jsx가 포함됐는지를 파악할 수 있습니다.
vscode typechecker가 <>를 만났을 시 tsx와 generic간에 구별을 잘 하도록 도와줍니다.
- React.[type] 형식을 사용합니다.
사용하는 type이 많은 경우 관리에 용이합니다.
React에서 제공하는 타입이라는 것을 명시해줍니다.
- reactEventHandler를 사용합니다.
onClickTabItem: React.MouseEventHandler<HTMLDivElement>;
본 문서는 지원사이트 개발 중 일관성있고 관리하기 쉬운 코드를 작성하기 위한 웹 프론트 개발 가이드입니다.