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 all 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;
66 changes: 65 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,66 @@
# 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 등)으로부터 의존성을 가지는 모듈을 추적하여 하나의 결과물을 만들어내는 모듈 번들러 역할을 합니다.<br>

- 여러 파일을 하나로 합치는 이유는 무엇일까요? - 하나의 파일로 합치면 원본 프로그램 파일보다 크기가 작아지고 속도가 빨라집니다. 또한 js 중복 변수를 해결해줍니다. 만약 하나의 파일로 합치지 않고 html, css, js로 웹 어플리케이션을 만든다면 각 모듈마다 HTTP 요청을 보내야하고, 사용자가 임의로 조작할 위험도 있습니다.<br><br>

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

- 바벨이 JSX를 변환하고 나면 어떻게 바뀔까요? - React.createElement를 호출하여 리액트 엘리먼트를 반환합니다.

```
import { jsx as _jsx } from "react/jsx-runtime";

const MyTest = ({
children
}) => {
return /*#__PURE__*/_jsx("div", {
color: "red",
children: children
});
};

ReactDOM.render( /*#__PURE__*/_jsx(MyTest, {
children: "TEST"
}), document.getElementById("root"));
```

- 왜 변환까지 해가며 JSX를 사용하는 걸까요? - JSX를 사용하지 않으면 React.createElement를 모두 써줘야하기 때문입니다. 더 간결하고 가독성이 좋은 코드를 작성할 수 있습니다.<br>

3. React에서 상태 변화가 생겼을 때 어떻게 변화를 알아챌 수 있나요? - 상태 정보를 가진 객체의 주소값이 변경되면 알 수 있습니다!</br>
- useState와 같은 hook을 사용하여 상태를 정의하고, setState와 같이 해당 상태를 변경하는 함수를 호출하여 상태를 변경합니다. 상태가 변경되면 React가 이를 감지하여 해당 컴포넌트를 다시 렌더링합니다. 가상 DOM 트리와 이전에 렌더링된 가상 DOM 트리를 비교하여 변경된 부분만 실제 DOM에 반영합니다.
> 불변성 : 메모리 영역의 값을 변경 할 수 없는 것<br>
> React 에서 불변성을 지켜야 하는 이유 : 리액트는 콜스택의 주소값만을 비교하여 상태 변화를 감지합니다. (=얕은 비교)<br>
> 원시타입 - 불변성 유지한 채로 새로운 메모리 영역에서 변경된 값이 저장됨 -> 콜스택 주소값 변화 감지 -> 리렌더링<br>
> 참조타입 - 콜스택에 메모리 힙의 주소만 저장, 값은 메모리 힙에 저장 -> 값 변경 시 콜스택 주소값 변화 없음 -> 리랜더링 안됨
Loading