-
Notifications
You must be signed in to change notification settings - Fork 163
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[1단계 - 장바구니] 호프(김문희) 미션 제출합니다. #71
Changes from all commits
6ffd155
9561d4f
8b09d7e
2ee50db
385d56f
264d755
915c284
154e2ec
8c4beed
eb36b1b
2046d1d
746e2ba
57a8022
d2ae2d9
13494e8
51cc167
eaf99fe
6c6ee1d
85f540b
d5c37b3
d2df965
2ca5630
e01abe4
c3f925b
f024198
dc9e5ba
9d664c5
5aa858f
c22a7d6
c5043bc
84612f0
7267a1d
eaa6f40
244a48d
3d81ac0
7127c0c
a9dd89f
4b362ad
3340802
ab8218b
c641576
915d50a
e500987
0c3aef1
b731b2f
3ebbb8b
7c50683
26d71ef
6a94f54
cbdd6ae
b1046be
3e3f8d6
42de9b0
fce8278
e40d9a3
137479b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
module.exports = { | ||
env: { | ||
browser: true, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. browser와 node 옵션 둘 다 주는 이유가 있을까요? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 일단..! 별 생각 없이 린트를 설정한 것 같아서 해당 옵션이 뭘 해주는지 부터 찾아봤습니다. Env 옵션은,
browser : true 로 해준 이유
node : true 로 해준 이유
이를 공부하다가 알게 된 사실인데, Env 옵션에 사용자가 직접 전역 변수를 설정할 수 도 있네요! 좋은 질문 감사드립니다 ㅎㅎ 참고자료There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아휴~~ 좋은 답변 감사합니다! 완전 박사가 되신듯.. |
||
es2021: true, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. es2021를 true 로 했을때 장점이 무엇일까요? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 위의 답변 에 대해 답하고 나니 이는 쉽게 파악이 되네요! 최신 문법(es2021)의 전역 변수들을 eslint가 자동으로 사전에 설정해놓음으로써 최신문법을 사용 할 수 있겠습니다. |
||
node: true, | ||
}, | ||
extends: ['eslint:recommended', 'plugin:react/recommended'], | ||
parserOptions: { | ||
ecmaFeatures: { | ||
jsx: true, | ||
}, | ||
ecmaVersion: 'latest', | ||
sourceType: 'module', | ||
}, | ||
plugins: ['react'], | ||
rules: { | ||
'react/react-in-jsx-scope': 'off', | ||
}, | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. | ||
|
||
# dependencies | ||
/node_modules | ||
/.pnp | ||
.pnp.js | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. pnp.js 는 무엇일까요? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 먼저 결론부터 말하면 pnp 는 yarn 환경에서 쓰이는 것이고, 일종의 패키지들의 룩업테이블 역할을 하는 것 같아요! pnp는 그러면 왜 pnp 가 필요할까요 ?! 먼저 yarn 이 해결하려는 문제와 함께 살펴볼게요. node_modules 문제점이전에 yarn install 을 실행하면, yarn 은 node_modules 폴더를 생성했습니다. 이 때 Node 는 특정 패키지에 대해서 바로 알지는 못하고, 계속해서 상위 node_modules 파일을 찾아보는 식으로 패키지를 찾았습니다. 그런데 이는 아래와 같은 이유로 매우 비효율적이었어요
그런데! Yarn 은 이미 디펜던시 트리에 대해 다~~~ 알고 있습니다. 따라서 패키지가 어디있는지 찾는 역할을 Node 에게 맡기지 않아도 되는거죠! 대신 패키지 매니저로서 패키지의 위치를 인터프리터에 알리고, 패키지 매니저 yarn 은 패키지 및 패키지 버전간의 디펜던시를 관리를 합니다. 이를 위해서 ‘plug(연결)Nplay’ 가 만들어졌어요 (인터프리터와 패키지를 연결한다는 것..이겠죠?) 따라서 yarn 은 2.0 버전부터 node_modules 대신 .pnp.js 파일을 생성합니다.
이러한 룩업테이블을 통해서 yarn 은 Node 에게 쉽게 ‘해당 패키지를 찾으려면 어디로가!’ 를 말해줄 수 있어요. 이전에 Node 가 일일이 node_modules 파일을 탐색해야했던 것에 비하면..엄청난 발전입니다. 참고자료There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 좋아용! 그런데, 지금 프로젝트에 pnp를 쓰고 있고, 사용하는 것일까요!? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아앗 답변만하고 ㅋㅋㅋ적용은 안했네요!! 😆 .. 현재 프로젝트에서 사용되지 않는 것들 다 gitignore에서 걷어내겠습니다..!! |
||
|
||
# testing | ||
/coverage | ||
|
||
# production | ||
/build | ||
|
||
# misc | ||
.DS_Store | ||
.env.local | ||
.env.development.local | ||
.env.test.local | ||
.env.production.local | ||
|
||
npm-debug.log* | ||
yarn-debug.log* | ||
yarn-error.log* | ||
|
||
.env |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
module.exports = { | ||
singleQuote: true, // 작은 따옴표 사용 | ||
trailingComma: 'all', // 꼬리 콤마 사용 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. trailingComma: 'all' 는 꼬리 콤마를 어떻게 사용한다는 걸까요? 어떤 옵션이 있고, 왜 all 을 사용하셨을까요? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 꼬리콤마란 무엇이고, 어떤 옵션이 있고, 왜 사용했는지 순으로 답변해보겠습니다!!! 꼬리콤마란Trailing commas 옵션은 여러 줄의 콤마로 구분되었을 경우 아래와 같이 꼬리 콤마를 붙여줍니다. // 포맷 전
const obj = {
key1: 1,
key2: 2
};
// 포맷 후
const obj = {
key1: 1,
key2: 2,
}; 꼬리콤마 옵션 종류옵션 종류는 아래와 같아요.
왜 all 로 설정했는지?
참고자료There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아주 훌륭합니다! |
||
proseWrap: 'never', // 마크다운 포매팅 제외 | ||
endOfLine: 'auto', // 개행문자 유지 (혼합일 경우, 첫 줄 개행문자로 통일) | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
module.exports = { | ||
"stories": [ | ||
"../src/**/*.stories.mdx", | ||
"../src/**/*.stories.@(js|jsx|ts|tsx)" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "../src/**/*.stories.@(js|jsx|ts|tsx)" 에서 @는 무얼나타낼까요? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 괄호 안에 있는 확장자를 허용하겠다는 표시(?)입니다. 이해하기 쉽게 |
||
], | ||
"addons": [ | ||
"@storybook/addon-links", | ||
"@storybook/addon-essentials", | ||
"@storybook/addon-interactions", | ||
"@storybook/preset-create-react-app" | ||
], | ||
"framework": "@storybook/react", | ||
"core": { | ||
"builder": "@storybook/builder-webpack5" | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import { addDecorator } from '@storybook/react'; | ||
import { MemoryRouter } from 'react-router-dom'; | ||
import StyleTheme from '../src/style/theme'; | ||
|
||
export const parameters = { | ||
actions: { argTypesRegex: '^on[A-Z].*' }, | ||
controls: { | ||
matchers: { | ||
color: /(background|color)$/i, | ||
date: /Date$/, | ||
}, | ||
}, | ||
}; | ||
|
||
addDecorator((story) => ( | ||
<MemoryRouter> | ||
<StyleTheme>{story()}</StyleTheme> | ||
</MemoryRouter> | ||
)); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# 장바구니 | ||
|
||
- [x] CDD - 컴포넌트 개발 | ||
- [x] Header 컴포넌트 만들기 | ||
- [x] MenuItem 컴포넌트 만들기 | ||
- [x] ProductItem 컴포넌트 만들기 | ||
- [x] ProductsContainer 컴포넌트 만들기 | ||
- [x] ProductList Page 컴포넌트 만들기 | ||
- [x] Mock Data 만들기 | ||
|
||
- [x] redux 적용 | ||
|
||
- [x] redux-thunk 적용 | ||
- [x] axios 적용 | ||
|
||
- [x] 데이터 로딩 시 스켈레톤 UI를 보여준다. | ||
- [x] 데이터가 비어 있을 시 비어있음 이미지를 보여준다. | ||
- [x] API 에러 발생 시 에러 이미지를 보여준다. | ||
|
||
- [x] 라우팅(상품목록, 상품상세, 장바구니) | ||
- [x] 상품 상세 페이지 | ||
|
||
- [x] UI 컴포넌트 작성 | ||
- [x] 상품 목록에서 상품 클릭 시 id를 받아서 해당 상품 상세 페이지로 라우팅 및 렌더링 | ||
- [x] product 리듀서 만들기 | ||
|
||
- [x] 공통컴포넌트 레이아웃 Outlet으로 리팩토링 | ||
- [x] 커스텀 훅 (dispatch, useSelector) 만들기 | ||
- [x] 상품상세 페이지를 보고 뒤로가기하면 불필요하게 다시 API 요청하지 않도록 만들기 | ||
- [x] 스토리북 정상 작동하게 만들기 | ||
- [x] Not Found Page 작성 | ||
|
||
- [x] cart 리듀서 만들기 | ||
- [x] 장바구니 넣기 기능(같은 아이템을 중복으로 장바구니에 넣을 경우 수량을 1개씩 증가한다) | ||
- [ ] 장바구니 페이지 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"compilerOptions": { | ||
"baseUrl": "src" | ||
}, | ||
"include": ["src"] | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
eslintrc.json과 .js. 어떤 차이가 있고 왜 두 가지를 제공하는걸까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
찾아보니, eslint 파일 설정 포맷은 js , json을 제외하고도
JavaScript (ESM), yaml
도 제공해준다고 합니다. 각각은 아래와 같이 사용됩니다.eslintrc.js
로 정의 할 수 있고, eslint 설정이 담긴 객체를 export 합니다.eslintrc.cjs
로 정의 할 수 있고, package.json 에서 “type”:”module” 을 지정 할 경우 사용합니다.import ~export문
을 쓰기 위해서는 .cjs 로 정의해줘야하는 것 같아요!eslint.yaml or eslint.yml
로 정의 할 수 있습니다.eslintrc.json
으로 정의 할 수 있습니다.그리고 만약 여러개의 설정 파일이 같은 디렉토리에 있다면 우선순위는,
이라구 합니다.
즉 말씀주신 eslintrc.js 와 eslintrc.json의 차이점은 lint 설정 파일 내에서 사용되는 언어 (javascript / json) 과 우선순위가 있겠네요!
그렇다면 왜 이렇게 eslint 가 여러개의 파일 설정 포맷을 제공하는지 추측해보았는데요..!
다양한 환경을 지원해주기 위해서!
라고 생각합니다.누군가는 백엔드 서버를 구현하는데 eslint 를 사용하기도 하고, 누군가는 클라이언트를 구현하기 위해서 사용하기도 하니까요? 따라서
js, esm
를 둘다 지원해주는 것 같고,json, yaml
을 지원해주는 것은 자바스크립트 모듈 시스템에 구애받지 않는 포맷을 제공해주기 위함인 것 같다고 추측합니다..!!!참고자료
Configuration Files - ESLint - Pluggable JavaScript linter
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아주 훌륭합니다... 박사가 되셨군요..