Skip to content
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

경북대 FE_이효은_1주차 과제 Step3 #85

Open
wants to merge 35 commits into
base: hyoeunkh
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
79fba18
docs: README 작성
Hyoeunkh Jun 25, 2024
e766839
feat: CRA 생성
Hyoeunkh Jun 26, 2024
912bde4
feat: typescript 설정
Hyoeunkh Jun 26, 2024
209be07
feat: tsconfig 설정
Hyoeunkh Jun 26, 2024
557587d
feat: ESLint 설정
Hyoeunkh Jun 26, 2024
214c3cf
feat: prettier 설정
Hyoeunkh Jun 26, 2024
0691fbb
feat: emotion-reset css 설정
Hyoeunkh Jun 26, 2024
14cd625
design: emotion을 활용하여 global style 설정
Hyoeunkh Jun 26, 2024
a1f5f90
feat: gitignore 추가
Hyoeunkh Jun 26, 2024
9cdb654
remove: 불필요한 코드 및 파일 제거
Hyoeunkh Jun 26, 2024
fc406c9
fix: React import 오류 해결을 위해 eslint 수정
Hyoeunkh Jun 26, 2024
3033e28
feat: scripts에 lint, format 명령어 추가
Hyoeunkh Jun 26, 2024
b4118a7
refactor: 코드 포매팅
Hyoeunkh Jun 26, 2024
99aa0e8
feat: 폴더 구조 설정을 위해 gitkeep 파일 추가
Hyoeunkh Jun 27, 2024
105072b
refactor: React.FC 삭제
Hyoeunkh Jun 27, 2024
540efc7
rename: globalstyle 파일 이름 reset으로 수정
Hyoeunkh Jun 27, 2024
267ade8
docs: 폴더 구조 설명 추가 및 구현할 기능 목록 수정
Hyoeunkh Jun 27, 2024
5a8e0d7
feat: test
Hyoeunkh Jun 28, 2024
cee7551
feat: test
Hyoeunkh Jun 28, 2024
b9cb66d
textㅅㅅㅅ
Hyoeunkh Jun 28, 2024
18da5d2
test
Hyoeunkh Jun 28, 2024
00c7b9c
feat: storybook 설치
Hyoeunkh Jun 28, 2024
20143d4
feat: 컴포넌트 구현
Hyoeunkh Jun 28, 2024
1164797
docs: 리드미 수정
Hyoeunkh Jun 28, 2024
a3f20b1
Merge branch 'feat-hyoeun' of https://github.com/Hyoeunkh/react-gift-…
Hyoeunkh Jun 28, 2024
e65d2c7
fix: 충돌 수정
Hyoeunkh Jun 28, 2024
0c92c89
docs: [1주차 리뷰] 질문에 대한 답 README 수정
Hyoeunkh Jun 30, 2024
e0a9e94
refactor: [1주차 리뷰] type 수정, outline 스타일 방식 변경
Hyoeunkh Jun 30, 2024
eb79af2
refactor: [1주차 리뷰] optional 지정 및 Pick 타입 사용
Hyoeunkh Jun 30, 2024
a3d5b2e
refactor: [1주차 리뷰] optional 설정 및 컴포넌트 분리
Hyoeunkh Jun 30, 2024
7f91189
fix: [1주차 리뷰] maxWidth의 타입을 구체적으로 지정
Hyoeunkh Jun 30, 2024
b75eff0
refactor: [1주차 리뷰] gap을 optional 타입으로 지정
Hyoeunkh Jun 30, 2024
2862a8c
remove: [1주차 리뷰] 불필요한 파일 제거
Hyoeunkh Jun 30, 2024
7d9b09e
fix: [1주차 리뷰] style의 단위 오류 수정 및 Pick 사용으로 타입 지정
Hyoeunkh Jun 30, 2024
a0f86cf
fix: [1주차 리뷰] stories 디폴트 값 변경
Hyoeunkh Jun 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"parser": "@typescript-eslint/parser",
"plugins": ["react", "@typescript-eslint", "prettier"],
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended",
],
"rules": {
"@typescript-eslint/explicit-module-boundary-types": "off",
"react/react-in-jsx-scope": "off",
},
"settings": {
"react": {
"version": "detect",
},
},
}
26 changes: 26 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# 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*
node_modules

*storybook.log
10 changes: 10 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"arrowParens": "always",
"printWidth": 120,
"singleQuote": true,
"trailingComma": "all",
"tabWidth": 2,
"useTabs": false,
"semi": true,
"endOfLine": "auto"
}
33 changes: 33 additions & 0 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import type { StorybookConfig } from '@storybook/react-webpack5';
import path from 'path';

import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin';

const config: StorybookConfig = {
stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
addons: [
'@storybook/preset-create-react-app',
'@storybook/addon-onboarding',
'@storybook/addon-links',
'@storybook/addon-essentials',
'@chromatic-com/storybook',
'@storybook/addon-interactions',
],
framework: {
name: '@storybook/react-webpack5',
options: {},
},
staticDirs: ['../public'],
webpackFinal: async (config) => {
if (config.resolve?.plugins) {
config.resolve.plugins = config.resolve.plugins || [];
config.resolve.plugins.push(
new TsconfigPathsPlugin({
configFile: path.resolve(__dirname, '../tsconfig.json'),
}),
);
}
return config;
},
};
export default config;
14 changes: 14 additions & 0 deletions .storybook/preview.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import type { Preview } from '@storybook/react';

const preview: Preview = {
parameters: {
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/i,
},
},
},
};

export default preview;
37 changes: 36 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,37 @@
# react-gift-react-foundation
FE 카카오 선물하기 1주차 과제: React 기초

## FE 카카오 선물하기 1주차 과제: React 기초

1. create-react-app 으로 프로젝트 생성 및 typescript로 동작되도록 세팅
2. tsconfig 설정
3. ESLint, Prettier 설정
4. emotion reset css 적용
5. gitignore 추가
6. 불필요한 코드 및 파일 제거
7. 폴더 생성

## 폴더 구조 설명

```bash
.root
├── node_modules
├── public
├── src
│ ├── assets // 이미지, 폰트 등 미디어 파일
│ ├── components // 주요 컴포넌트
│ ├── hooks // 커스텀 훅
│ ├── pages // 페이지 컴포넌트
│ ├── services // api
│ ├── store // 상태관리
│ ├── styles // css
│ └── utils // 공통함수, 상수 등
└──
```

## 3단계 과제

질문 1. webpack은 무엇이고 어떤 역할을 하고 있나요? -여러 개의 파일을 하나의 파일로 합쳐주는 번들러입니다. 여기서 번들러란 코드, 프로그램을 묶어서 패키지로 제공하는 것입니다. 하나의 시작점(index.js 등)으로부터 의존성을 가지는 모듈을 추적하여 하나의 결과물을 만들어내는 모듈 번들러 역할을 합니다.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여러 파일을 하나로 합치는 이유는 무엇일까요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


현재 storybook이 정상적으로 실행되지 않는데요, 만약 효은님 환경에서는 정상적으로 동작하고 있다면 다음 순서에 따라 한 번 진행해보실래요?

  • node_modules 폴더를 삭제한다.
  • npm i로 다시 의존성을 설치한다.
  • npm run storybook으로 스토리북을 띄우고 확인한다.
    위 순서대로 진행한 후, 만약 제대로 실행되지 않는다면 왜 이런 문제가 발생했을지 확인해 보시고 잘 동작하도록 수정해 보시면 좋겠어요!

제 컴퓨터에는 의존성을 삭제 후 재설치해도 잘 실행이 되어서 어떤 부분에서 그렇게 말씀하셨는지 잘 모르겠습니다!
저번에 PR 날리기 직전, 갑자기 절대경로가 인식이 안되어서 .storybook/main.ts에 webpackFinal를 추가하여 해결했는데, 이부분이 문제인 걸까요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 그리고 모든 컴포넌트에 공통된 피드백입니다.
    만약 제가 Button 컴포넌트를 사용하려고 하는데, padding을 x방향으로 1000px만큼, y방향으로 1000px만큼 주고싶다면 어떡해야 할까요?
    즉, 스타일 오버라이딩을 어떤 방식으로 제안하는 컴포넌트인가요?

emotion/reactcss props로 스타일을 오버라이딩합니다! 예를 들면

<Button css={css`
  padding-left:1000px;
  padding-right:1000px
`}/>

입니다. 사실 멘토님의 질문 의도를 제대로 파악하지 못하였는데, css props를 사용해서 재사용성을 어떻게 보장할 것인지 묻는 것일까요? 2주차 과제를 진행하면서 위 코드대로 했을 때, 컴포넌트 props에 css가 들어갈 수 없는 오류가 있었습니다. 그래서 열심히 찾아본 결과

@emotion/babel-preset-css-prop를 설치해보았는데,
import React from ‘react’ 와 같은 에러가 떠서 아래와 같이 시도했지만
결국 상단에 주석을 추가하는 방식으로 해결했습니다.. 이 방법밖에 없는 걸까요?

처음 시도해본 코드
//babel.config.js

module.exports = {
   presets: [
     '@babel/preset-env',
     ['@babel/preset-react', { runtime: 'automatic', importSource: '@emotion/react' }],
     ['@emotion/babel-preset-css-prop'],
   ],
   plugins: ['@emotion/babel-plugin'],
 };

결국 /* @jsxImportSource @emotion/react */ 를 추가하는 방법으로 해결


질문 2. 브라우저는 어떻게 JSX 파일을 읽을 수 있나요? -바벨과 같은 컴파일러를 이용하여 JSX를 자바스크립트 객체로 변환하면 읽을 수 있습니다.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 바벨이 JSX를 변환하고 나면 어떻게 바뀔까요?
  • 왜 변환까지 해가며 JSX를 사용하는 걸까요?


질문 3. React에서 상태 변화가 생겼을 때 어떻게 변화를 알아챌 수 있나요? -상태 정보를 가진 객체의 주소값이 변경되면 알 수 있습니다!
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

상태 변화를 알아채는 방법에 대한 적절한 설명이라고 할 수 있을까요~?

React는 어떻게 상태가 변했음을 알 수 있을까요??
상태를 변화시키기 위한 과정을 차근차근 하나씩 살펴보면서 다시 한 번 고민해보시면 좋겠습니다 ㅎㅎ

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0c92c89
README에 추가적으로 공부하고 이해한 것들을 적어두었습니다!

Loading