From 001ba650cb96f843528ba839d9d297345a8acf75 Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Tue, 2 Jul 2024 15:26:51 +0900 Subject: [PATCH 01/21] =?UTF-8?q?Docs:=202=EC=A3=BC=EC=B0=A8=20Step1=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EA=B8=B0=EB=8A=A5=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 9fa347d00..1ee7843ff 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,23 @@ # 카카오 테크 캠퍼스 - 프론트엔드 카카오 선물하기 편 -[🔗 link](https://edu.nextstep.camp/s/hazAC9xa) +### 2주차 Step1 구현 기능 정리 +1. Header, Footer와 같은 공통 컴포넌트를 만들어요. (모든 페이지에서 Header와 Footer는 보여질 수 있게 적용) +2. 각 Url Path별로 페이지 만들기 -## Week 1. 1단계 - 프로젝트 세팅 +3. 메인 페이지 (/) +- Theme 카테고리 섹션을 추가해요. +- Theme 카테고리 Item을 클릭 시 Theme 페이지(/theme/:themeKey)로 이동해요. +- 실시간 급상승 선물랭킹을 추가해요. +- 필터 기능을 hooks를 사용하여 구현해요. (ex. 전체, 여성이, 남성이, 청소년이 / 받고 싶어한, 많이 선물한, 위시로 받은) +- 상품 목록을 처음에는 6개만 보여지게 해요. 더보기를 누르는 경우 상품 목록을 더 보여줘요. (접기 버튼을 누르면 다시 6개만 보여지게 해요) -[🔗 link](https://edu.nextstep.camp/s/hazAC9xa/ls/QzgHvzRM) +4. Theme 페이지(/theme/:themeKey) +- [ ] Header 섹션을 추가해요. +- 재사용성을 고려하여 Header 섹션을 만들어요. (themeKey에 따라 label, title, description, backgroundColor가 달라짐) +- 상품 목록 섹션을 추가해요. -## Week 1. 2단계 - Storybook을 사용하여 재사용 가능한 컴포넌트 구현 +5. 로그인 페이지(/login) +ID와 PW를 입력하면 로그인이 되도록 구현해요. (ID와 PW는 아무 값을 입력해도 통과되도록 해요.) -[🔗 link](https://edu.nextstep.camp/s/hazAC9xa/ls/4wYFPW1K) - -## Week 2. 1단계 - 페이지 만들기 - -[🔗 link](https://edu.nextstep.camp/s/hazAC9xa/ls/QzV1ncxk) +6. 나의 페이지(/my-account) +로그아웃을 할 수있는 버튼을 추가해요. \ No newline at end of file From d04cfc0de4773949deca81b1ea56cd9c3c82cc78 Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Wed, 3 Jul 2024 11:10:48 +0900 Subject: [PATCH 02/21] =?UTF-8?q?feat:=20router=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 44 +++++++++++++++++++++++++++++++++++++++++++- package.json | 7 ++++--- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8f100a3a8..892a2aff0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "^6.24.0" }, "devDependencies": { "@craco/craco": "^7.1.0", @@ -6135,6 +6136,15 @@ "@babel/runtime": "^7.13.10" } }, + "node_modules/@remix-run/router": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz", + "integrity": "sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -28318,6 +28328,38 @@ } } }, + "node_modules/react-router": { + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz", + "integrity": "sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.17.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz", + "integrity": "sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.17.0", + "react-router": "6.24.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", diff --git a/package.json b/package.json index 8a3e091c7..21b33e338 100644 --- a/package.json +++ b/package.json @@ -25,11 +25,10 @@ "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "^6.24.0" }, "devDependencies": { - "react-scripts": "5.0.1", - "typescript": "^4.9.5", "@craco/craco": "^7.1.0", "@emotion/eslint-plugin": "^11.11.0", "@storybook/addon-essentials": "^7.6.17", @@ -65,8 +64,10 @@ "eslint-plugin-storybook": "^0.8.0", "prettier": "^3.2.5", "prop-types": "^15.8.1", + "react-scripts": "5.0.1", "storybook": "^7.6.17", "tsconfig-paths-webpack-plugin": "^4.1.0", + "typescript": "^4.9.5", "webpack": "^5.90.3" }, "overrides": { From 916238277c82c02d2f576fe91febb778de4a7ddd Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Wed, 3 Jul 2024 15:51:39 +0900 Subject: [PATCH 03/21] =?UTF-8?q?feat:=20Header=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Header.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/components/Header.js diff --git a/src/components/Header.js b/src/components/Header.js new file mode 100644 index 000000000..e7c41b60d --- /dev/null +++ b/src/components/Header.js @@ -0,0 +1,18 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; + +const Header = () => { + return ( +
+ +
+ ); +}; + +export default Header; \ No newline at end of file From 2f050056333d3bb815aca409ab948e08e4b84e1a Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Wed, 3 Jul 2024 15:51:58 +0900 Subject: [PATCH 04/21] =?UTF-8?q?feat:=20Footer=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Footer.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/components/Footer.js diff --git a/src/components/Footer.js b/src/components/Footer.js new file mode 100644 index 000000000..cd9cf120a --- /dev/null +++ b/src/components/Footer.js @@ -0,0 +1,11 @@ +import React from 'react'; + +const Footer = () => { + return ( + + ); +}; + +export default Footer; \ No newline at end of file From 42cdb200512410153edc43543c80047224026e8f Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Fri, 5 Jul 2024 13:03:42 +0900 Subject: [PATCH 05/21] =?UTF-8?q?feat:=20=EA=B3=B5=ED=86=B5=20Header=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/Header.tsx | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 src/components/common/Header.tsx diff --git a/src/components/common/Header.tsx b/src/components/common/Header.tsx new file mode 100644 index 000000000..332048f0d --- /dev/null +++ b/src/components/common/Header.tsx @@ -0,0 +1,23 @@ +import './Header.css'; // 스타일링을 위한 CSS 파일 + +import React from 'react'; +import { Link } from 'react-router-dom'; + +const Header: React.FC = () => { + return ( +
+
+ 선물하기 +
+ +
+ ); +}; + +export default Header; From 86da641781e147347ef26a0824b7618d1f951a17 Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Fri, 5 Jul 2024 13:04:00 +0900 Subject: [PATCH 06/21] =?UTF-8?q?feat:=20=EA=B3=B5=ED=86=B5=20footer=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/Footer.tsx | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/components/common/Footer.tsx diff --git a/src/components/common/Footer.tsx b/src/components/common/Footer.tsx new file mode 100644 index 000000000..857cf606a --- /dev/null +++ b/src/components/common/Footer.tsx @@ -0,0 +1,13 @@ +import './Footer.css'; // 스타일링을 위한 CSS 파일 + +import React from 'react'; + +const Footer: React.FC = () => { + return ( + + ); +}; + +export default Footer; From 786100bf3c81e54fc7e4dcf84de32253457e9ad5 Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Fri, 5 Jul 2024 22:00:29 +0900 Subject: [PATCH 07/21] =?UTF-8?q?react-router-dom=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 36 ++++++++++++++++-------------------- package.json | 6 +++--- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index 892a2aff0..356ef96a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,8 +31,8 @@ "@testing-library/user-event": "^13.5.0", "@types/jest": "^27.5.2", "@types/node": "^16.18.82", - "@types/react": "^18.2.57", - "@types/react-dom": "^18.2.19", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "eslint": "^8.56.0", @@ -53,7 +53,7 @@ "react-scripts": "5.0.1", "storybook": "^7.6.17", "tsconfig-paths-webpack-plugin": "^4.1.0", - "typescript": "^4.9.5", + "typescript": "^5.5.3", "webpack": "^5.90.3" } }, @@ -10546,21 +10546,22 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.58", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.58.tgz", - "integrity": "sha512-TaGvMNhxvG2Q0K0aYxiKfNDS5m5ZsoIBBbtfUorxdH4NGSXIlYvZxLJI+9Dd3KjeB3780bciLyAb7ylO8pLhPw==", + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "dev": true, + "license": "MIT", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", - "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } @@ -10577,12 +10578,6 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "dev": true - }, "node_modules/@types/semver": { "version": "7.5.7", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", @@ -31687,16 +31682,17 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/ufo": { diff --git a/package.json b/package.json index 21b33e338..3ef7dac31 100644 --- a/package.json +++ b/package.json @@ -45,8 +45,8 @@ "@testing-library/user-event": "^13.5.0", "@types/jest": "^27.5.2", "@types/node": "^16.18.82", - "@types/react": "^18.2.57", - "@types/react-dom": "^18.2.19", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "eslint": "^8.56.0", @@ -67,7 +67,7 @@ "react-scripts": "5.0.1", "storybook": "^7.6.17", "tsconfig-paths-webpack-plugin": "^4.1.0", - "typescript": "^4.9.5", + "typescript": "^5.5.3", "webpack": "^5.90.3" }, "overrides": { From 0ca745fb49513b334e1f1c311cd0899fd6ffa823 Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Fri, 5 Jul 2024 23:22:57 +0900 Subject: [PATCH 08/21] =?UTF-8?q?feat:=20Footer=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/Footer.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/common/Footer.tsx b/src/components/common/Footer.tsx index 857cf606a..df11db1c9 100644 --- a/src/components/common/Footer.tsx +++ b/src/components/common/Footer.tsx @@ -1,12 +1,12 @@ -import './Footer.css'; // 스타일링을 위한 CSS 파일 +import '../../styles/Footer.css'; // CSS 파일 경로를 지정합니다. import React from 'react'; const Footer: React.FC = () => { return ( - +
+

카카오톡 선물하기

+
); }; From 6cf6093d3f8174cd6e7445ce4dbb3170e6dcd268 Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Fri, 5 Jul 2024 23:23:17 +0900 Subject: [PATCH 09/21] =?UTF-8?q?feat:=20Header=20=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/styles/Header.css | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/styles/Header.css diff --git a/src/styles/Header.css b/src/styles/Header.css new file mode 100644 index 000000000..0099eefd2 --- /dev/null +++ b/src/styles/Header.css @@ -0,0 +1,17 @@ +.header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 20px; +} + +.giftIcon { + width: 61px; + height: 54px; +} + +.login { + text-decoration: none; + color: black; + font-weight: bold; +} From aa83071177660cd31ba30991de7d6462cc7405cc Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Fri, 5 Jul 2024 23:23:53 +0900 Subject: [PATCH 10/21] =?UTF-8?q?feat:=20Login=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Login.tsx | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/Login.tsx diff --git a/src/Login.tsx b/src/Login.tsx new file mode 100644 index 000000000..9f7082690 --- /dev/null +++ b/src/Login.tsx @@ -0,0 +1,84 @@ +import styled from '@emotion/styled'; +import React, { useState } from 'react'; + +const Login: React.FC = () => { + const [id, setId] = useState(''); + const [password, setPassword] = useState(''); + const [message, setMessage] = useState(''); + + const handleLogin = () => { + // 임의로 로그인 통과 + setMessage('로그인 성공'); + }; + + return ( + + + kakao + setId(e.target.value)} + /> + setPassword(e.target.value)} + /> + 로그인 + {message && {message}} + + + ); +}; + +export default Login; + +const LoginContainer = styled.div` + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background-color: #fff; +`; + +const LoginBox = styled.div` + display: flex; + flex-direction: column; + align-items: center; + padding: 20px; + border: 1px solid #e0e0e0; + border-radius: 8px; +`; + +const Logo = styled.h1` + font-size: 24px; + margin-bottom: 20px; +`; + +const Input = styled.input` + width: 300px; + padding: 10px; + margin-bottom: 10px; + border: 1px solid #ccc; + border-radius: 4px; +`; + +const LoginButton = styled.button` + width: 300px; + padding: 10px; + background-color: yellow; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 16px; + font-weight: bold; +`; + +const Message = styled.p` + margin-top: 10px; + color: green; + font-weight: bold; +`; From 64e95932db8fabd9be791ad0dbc102918da2ccab Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Fri, 5 Jul 2024 23:24:23 +0900 Subject: [PATCH 11/21] =?UTF-8?q?feat:=20=ED=99=88=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EC=9E=84=EC=9D=98=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Home.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/Home.tsx diff --git a/src/Home.tsx b/src/Home.tsx new file mode 100644 index 000000000..dc4666a10 --- /dev/null +++ b/src/Home.tsx @@ -0,0 +1,11 @@ +import React from 'react'; + +const Home: React.FC = () => { + return ( +
+

Home Page

+
+ ); +}; + +export default Home; From ff392282fa06cae7bf3b19d9ccdab4ab3b1a32dc Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Fri, 5 Jul 2024 23:24:50 +0900 Subject: [PATCH 12/21] =?UTF-8?q?design:=20css=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/Header.tsx | 20 +++++++------------- src/styles/Footer.css | 13 +++++++++++++ 2 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 src/styles/Footer.css diff --git a/src/components/common/Header.tsx b/src/components/common/Header.tsx index 332048f0d..7a0720ed1 100644 --- a/src/components/common/Header.tsx +++ b/src/components/common/Header.tsx @@ -1,22 +1,16 @@ -import './Header.css'; // 스타일링을 위한 CSS 파일 +import '../../styles/Header.css'; // CSS 파일 경로를 지정합니다. import React from 'react'; import { Link } from 'react-router-dom'; const Header: React.FC = () => { return ( -
-
- 선물하기 -
- -
+
+ + 선물하기 + + 로그인 +
); }; diff --git a/src/styles/Footer.css b/src/styles/Footer.css new file mode 100644 index 000000000..d938629d3 --- /dev/null +++ b/src/styles/Footer.css @@ -0,0 +1,13 @@ +.footer { + background-color: #f0f0f0; + padding: 20px; + text-align: center; + position: absolute; + bottom: 0; + width: 100%; +} + +.footerText { + color: #000; + font-size: 14px; +} From ca38f4073bef2ef1af26b0f280e9be222942bde0 Mon Sep 17 00:00:00 2001 From: HyeonChae1104 <211063@jnu.ac.kr> Date: Fri, 5 Jul 2024 23:25:25 +0900 Subject: [PATCH 13/21] =?UTF-8?q?App.tsx=20=ED=8C=8C=EC=9D=BC=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 1df5ce256..bbfefbfd7 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,18 +1,35 @@ import styled from '@emotion/styled'; +import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'; -const App = () => { - const name = 'Josh Perez'; +import Footer from './components/common/Footer'; // Footer 컴포넌트를 import 합니다. +import Header from './components/common/Header'; +import Home from './Home'; +import Login from './Login'; +const App = () => { return ( -
- Hello, {name} -
+ + +
{/* 모든 페이지에서 공통으로 보여지는 Header */} + + + } /> + } /> + + +