-
Notifications
You must be signed in to change notification settings - Fork 2
Code Convention
YujeanSohn edited this page Jan 2, 2023
·
5 revisions
- 일반:
camelCase - 상수:
SNAKE_CASE - Boolean:
is[대상][상태](ex.isUserAdded) - 의도가 드러나는 변수명으로 작성하기!
- naming
- camelCase
- 동사로 시작 (ex.
addCount) - 이벤트 핸들러는
handle을 prefix로 가진다.
- 구현 방식
- 하나의 함수가 하나의 책임을 지도록 한다.
- 화살표 함수를 사용한다.
- 비동기 처리는
async,await를 사용한다.
├── root
│ ├── public # public
│ ├── server # json-server
│ └── src
│ ├── apis # axios apis, axios instance
│ ├── components # components
│ ├── constants # 두루 사용될 공공재 상수
│ ├── hooks # custom hooks
│ ├── pages # page
│ ├── redux
│ ├── styles # 공통 스타일
│ ├── shared # 공통 컴포넌트 (ex. Router)
│ └── utils # 두루 사용될 공공재 함수
- 폴더 이름은 소문자
- 파일 확장자
- 컴포넌트를 구성하는 파일은
.tsx사용 - 컴포넌트 외의 파일은
.ts사용
- 컴포넌트를 구성하는 파일은
- 컴포넌트는 함수형 컴포넌트를 사용한다.
- 컴포넌트 명은 컴포넌트가 담는 정보를 대표한다. (ex. 댓글 컴포넌트 ->
Comment.jsx) - 컴포넌트 파일 내 코드 작성 순서
- import
- import 순서 (종류 구분 사이에는 한 줄 공백을 포함한다)
* 외부 라이브러리
* 프로젝트 기본 구성 라이브러리 (ex. `react`, `react-route-dom`, `styled-components`)
* 그 외 (ex. `bootstrap`, `react-player`...)
* 프로젝트 내 컴포넌트 (ex. `src/components/` 폴더 내의 파일들)
* 프로젝트 내 thunk
* 프로젝트 내 utils
* 프로젝트 내 assets
- 컴포넌트
- styled-component
- export
├── components
│ ├── common # 2개 이상의 페이지에서 사용되는 공공재 컴포넌트
│ ├── elem # atom 단위 컴포넌트
│ ├── modal # molecule 단위 컴포넌트 (컴포넌트 용도에 맞는 이름으로 폴더 생성)
│ ├── layout # 공통 레이아웃 컴포넌트
│ ├── user # 사용자 전용 컴포넌트
│ ├── goal # 목표 전용 컴포넌트
- atomic design에 따라서 페이지 내 구성 요소가 하나의 관심사를 가질 때까지 나눈다.
-
atom 단위: 최소 단위 UI 컴포넌트는
src/components/common/elem폴더 내에서 관리한다. -
molecule 단위: 하나의 작업을 처리하는데 사용되는 컴포넌트들은 상위 컴포넌트로 묶여서
src/components/common/[컴포넌트 용도]폴더 내에서 관리한다. -
organism 단위: 특정 페이지 내에서 하나의 관심사(ex. 사용자 관련)를 다루는 컴포넌트들은 상위 컴포넌트로 묶여서
src/components/[관심사]폴더 내에서 관리한다. - 같은 페이지에 속하는 컴포넌트들은 상위 페이지 컴포넌트로 묶여서
src/pages/폴더 내에서 관리한다.
- slice마다
isLoading값을 저장. - 해당 slice의 값을 호출하고 사용하는 부분에서
isLoading값을 사용해 조건부 랜더링을 한다. - 한 페이지 내에서 같은 slice의 thunk API를 여러 컴포넌트에서 사용하지 않도록 주의한다.
- 분업한 작업 단위로 test 시 필요한 데이터는
initialState에 dummy data를 사용한다. - 그 외 필요한 test code는 반드시 주석 처리를 통해 test code인 것을 기억해두고, commit에는 미포함한다.
position
display
width/height
margin/padding
color 관련
text 관련
tranform, transition, animation
module.exports = {
env: {
browser: true,
es2021: true,
},
extends: [
“eslint:recommended”,
“plugin:react/recommended”,
“plugin:@typescript-eslint/recommended”,
],
overrides: [],
parser: “@typescript-eslint/parser”,
parserOptions: {
ecmaVersion: “latest”,
sourceType: “module”,
},
plugins: [“react”, “@typescript-eslint”],
rules: {},
};
}
module.exports = {
arrowParens: 'always',
bracketSpacing: true,
jsxBracketSameLine: true,
jsxSingleQuote: true,
printWidth: 80,
proseWrap: 'always',
quoteProps: 'as-needed',
semi: true,
singleQuote: true,
tabWidth: 2,
trailingComma: 'es5',
useTabs: false,
}
thanks to 동석, 예나, 제승, 안지현 기술매니저님