Skip to content

PI304/PI_WEB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

32 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš€ PLAYIDEA WEB PAGE

Index

  1. ์‹œ์ž‘ํ•˜๊ธฐ
  2. ๊ธฐ์ˆ  ์Šคํƒ
  3. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๊ฐ€์ด๋“œ
  4. ํ˜‘์—… ๋ฐฉ๋ฒ•
  5. ์ฝ”๋“œ ์ปจ๋ฒค์…˜

1. ์‹œ์ž‘ํ•˜๊ธฐ

1. Clone

$ git clone https://github.com/PI304/PI_WEB.git
$ cd PI_WEB
$ yarn install

2. Run

$ yarn dev

2. ๊ธฐ์ˆ  ์Šคํƒ



3. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๊ฐ€์ด๋“œ

โ”œโ”€โ”€ @types
โ”‚ย ย  โ”œโ”€โ”€ base.d.ts
โ”‚ย ย  โ”œโ”€โ”€ index.d.ts
โ”‚ย ย  โ”œโ”€โ”€ main.d.ts
โ”‚ย ย  โ”œโ”€โ”€ seo.d.ts
โ”‚ย ย  โ”œโ”€โ”€ shared.d.ts
โ”‚ย ย  โ”œโ”€โ”€ styled.d.ts
โ”‚ย ย  โ”œโ”€โ”€ team.d.ts
โ”‚ย ย  โ”œโ”€โ”€ value.d.ts
โ”‚ย ย  โ””โ”€โ”€ work.d.ts
โ”œโ”€โ”€ components
โ”‚ย ย  โ”œโ”€โ”€ layouts
โ”‚ย ย  โ”œโ”€โ”€ pages
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ main
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ team
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ value
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ work
โ”‚ย ย  โ”œโ”€โ”€ seo
โ”‚ย ย  โ””โ”€โ”€ shared
โ”œโ”€โ”€ constants
โ”‚ย ย  โ”œโ”€โ”€ index.ts
โ”‚ย ย  โ”œโ”€โ”€ paths.ts
โ”‚ย ย  โ””โ”€โ”€ seo.ts
โ”œโ”€โ”€ hooks
โ”œโ”€โ”€ modules
โ”œโ”€โ”€ pages
โ”‚ย ย  โ”œโ”€โ”€ _app.tsx
โ”‚ย ย  โ”œโ”€โ”€ _document.tsx
โ”‚ย ย  โ”œโ”€โ”€ index.tsx
โ”‚ย ย  โ”œโ”€โ”€ main.tsx
โ”‚ย ย  โ”œโ”€โ”€ team.tsx
โ”‚ย ย  โ”œโ”€โ”€ value.tsx
โ”‚ย ย  โ””โ”€โ”€ work.tsx
โ”œโ”€โ”€ public
โ”œโ”€โ”€ styles
โ”‚ย ย  โ”œโ”€โ”€ colors.ts
โ”‚ย ย  โ”œโ”€โ”€ devices.ts
โ”‚ย ย  โ”œโ”€โ”€ fonts.ts
โ”‚ย ย  โ”œโ”€โ”€ global.ts
โ”‚ย ย  โ”œโ”€โ”€ index.ts
โ”‚ย ย  โ”œโ”€โ”€ reset.ts
โ”‚ย ย  โ”œโ”€โ”€ sizes.ts
โ”‚ย ย  โ”œโ”€โ”€ styled.ts
โ”‚ย ย  โ””โ”€โ”€ svgs.tsx
โ”œโ”€โ”€ next-env.d.ts
โ”œโ”€โ”€ next.config.js
โ”œโ”€โ”€ tsconfig.json
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ package.json
โ””โ”€โ”€ yarn.lock

1. @types ๋””๋ ‰ํ† ๋ฆฌ

  1. ๋ชจ๋“  type ์„ ์–ธ์€ ์ด๊ณณ์—์„œ ํ•ด์ฃผ์„ธ์š”.
  2. ํŒŒ์ผ ์ด๋ฆ„์€ *.d.ts ํ˜•์‹์„ ์ง€์ผœ์ฃผ์„ธ์š”.
  3. import๊ฐ€ ํ•„์š”ํ•œ ํƒ€์ž… ์„ ์–ธ ์‹œ์—๋Š” @types/index.d.ts ํŒŒ์ผ์— ์„ ์–ธํ•ด์ฃผ์„ธ์š”.

PLEASE DO NOT - ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์—์„œ ํƒ€์ž… ์„ ์–ธ

2. components ๋””๋ ‰ํ† ๋ฆฌ

  1. components/layouts - ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ
  2. components/pages - ๊ฐ page์˜ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ ๋ฐ ํ•ด๋‹น page์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ
  3. components/seo - CustomHead ๋“ฑ SEO์— ์‚ฌ์šฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ
  4. components/shared - ๊ธฐํƒ€ ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ
  5. components/... - ์ถ”ํ›„ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. constants ๋””๋ ‰ํ† ๋ฆฌ

  1. ์ค‘์š”ํ•œ ์ƒ์ˆ˜๋Š” ์ด๊ณณ์—์„œ ๊ด€๋ฆฌํ•ด์ฃผ์„ธ์š”. (์˜ˆ: paths, seo...)
  2. ์ค‘์š”ํ•จ์˜ ๊ธฐ์ค€ (1๊ฐœ ์ด์ƒ ์ถฉ์กฑ ์‹œ ์ค‘์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ)
    1. 2๋ฒˆ ์ด์ƒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ (์žฌ์‚ฌ์šฉ)
    2. ์ถ”ํ›„ ๋…ผ์˜์— ์˜ํ•ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ (์ถ”์ ์šฉ์ด)
    3. ๊ธฐํƒ€ ์‚ฌ์œ ๋กœ ์ค‘์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฒฝ์šฐ

4. hooks ๋””๋ ‰ํ† ๋ฆฌ

custom hook์€ ์ด๊ณณ์— ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

5. modules ๋””๋ ‰ํ† ๋ฆฌ

์ถ”ํ›„ Redux ๊ด€๋ จ ํŒŒ์ผ๋“ค์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

6. pages ๋””๋ ‰ํ† ๋ฆฌ

๋ผ์šฐํ„ฐ ์„ค์ •์„ ์œ„ํ•œ Next.js ์˜ˆ์•ฝ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

7. public ๋””๋ ‰ํ† ๋ฆฌ

์ด๋ฏธ์ง€ ๋“ฑ asset์€ public/assets ์— ์ €์žฅํ•ด์ฃผ์„ธ์š”.

์ฐธ๊ณ  - SVG๋Š” ํŒŒ์ผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , styles/svgs.tsx์— ์ƒ์ˆ˜๋กœ ์ •์˜ํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

8. styles ๋””๋ ‰ํ† ๋ฆฌ

  1. styles/colors.ts - ๋””์ž์ธ ์ปฌ๋Ÿฌ
  2. styles/devices.ts - ๋ฐ˜์‘ํ˜• ์Šคํƒ€์ผ์„ ์œ„ํ•œ ๋””๋ฐ”์ด์Šค ๊ตฌ๋ถ„ ๊ธฐ์ค€ ๋“ฑ
  3. styles/fonts.ts - ๋””์ž์ธ ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ
  4. styles/global.ts - ์ „์—ญ ์Šคํƒ€์ผ
  5. styles/reset.ts - ๋ฆฌ์…‹ ์Šคํƒ€์ผ
  6. styles/styled.ts - ์ค‘์š”ํ•œ Styled-components (1๋ฒˆ ์ด์ƒ ์žฌ์‚ฌ์šฉ OR ์ถ”์ ์šฉ์ด)
  7. styles/svgs.tsx - SVG ์ •์˜

9. Named Export & Re-Export in Index.ts

๊ฐ ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” index.ts๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

// components/shared/index.ts
export * from './ContactWidget';
export * from './Navigator';
export * from './SpaceBackground';

๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์˜ ํŒŒ์ผ๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ๋ชจ์•„ ๋‹ค์‹œ๊ธˆ Re-Export ํ•˜์—ฌ,
๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋””๋ ‰ํ† ๋ฆฌ๋ช…๋งŒ์œผ๋กœ Import ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

// components/layouts/WithNavigatorLayout.tsx
import { Navigator, ContactWidget } from '../shared';

์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ๊ฐ Importํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•˜์—ฌ Import ๋ฌธ์„ ์งง๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ ,
์ถ”ํ›„ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ์ด๋ฆ„์ด ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ์— ๋Œ€์‘ํ•˜๊ธฐ ์šฉ์ดํ•˜๋‹ค๋Š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

export * from './์ปดํฌ๋„ŒํŠธ๊ฒฝ๋กœ' ํ˜•์‹์œผ๋กœ ํŒŒ์ผ์„ Re-Export ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”,
์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ Default Export๊ฐ€ ์•„๋‹Œ Named Export๋กœ ๋‚ด๋ณด๋‚ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ญ์ƒ Named Export ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด์ฃผ์‹œ๊ณ , ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์˜ index.ts์—์„œ ์œ„์™€ ๊ฐ™์ด Re-Export ํ•ด์ฃผ์„ธ์š”.

์•„๋ž˜๋Š” ์ž˜๋ชป๋œ ์˜ˆ์‹œ์™€ ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ์˜ ๋น„๊ต์ž…๋‹ˆ๋‹ค.

// ์ž˜๋ชป๋œ ์˜ˆ์‹œ (Default Export)
export default function Component() {
  return <></>;
}

// ์ž˜๋ชป๋œ ์˜ˆ์‹œ (Default Export)
const Component = () => {
  return <></>;
};

export default Component;

// ์ž˜๋ชป๋œ ์˜ˆ์‹œ (Named Export + ์ผ๋ฐ˜ ํ•จ์ˆ˜)
export function Component() {
  return <></>;
};
// ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ (Named Export + ํ™”์‚ดํ‘œ ํ•จ์ˆ˜)
export const Component = () => {
  return <></>;
};

4. ํ˜‘์—… ๋ฐฉ๋ฒ•

1. Branching Strategy

PR์„ ํ†ตํ•ด Feature ๋ธŒ๋žœ์น˜๋“ค์„ Develop์— ๋จธ์ง€ํ•˜๊ณ ,
์ตœ์ข… ๋ฐฐํฌํ•  ์‹œ๊ธฐ๊ฐ€ ๋˜๋ฉด Admin ๊ด€๋ฆฌ์ž๊ฐ€ Develop ๋ธŒ๋žœ์น˜๋ฅผ Production ๋ธŒ๋žœ์น˜์— ๋จธ์ง€ํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

2. ํ˜‘์—… ๊ณผ์ •

  1. ๋กœ์ปฌ์— Cloneํ•œ ๋ ˆํฌ์—์„œ Feature ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฐœ๋ฐœ์ด ๋๋‚ฌ๋‹ค๋ฉด ๋‹ค์‹œ ํ•œ๋ฒˆ ์›๊ฒฉ ๋ ˆํฌ์˜ ์ตœ์‹  ์ปค๋ฐ‹์„ ๋ฐ›์•„์™€์ค๋‹ˆ๋‹ค.
// ์ฒดํฌ์•„์›ƒ ํ•˜๊ธฐ ์ „, Feature ๋ธŒ๋žœ์น˜์—์„œ์˜ ์ž‘์—… ๋‚ด์šฉ์„ ์ปค๋ฐ‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
$ git checkout develop
$ git pull origin develop
  1. ์ถ”๊ฐ€๋œ ์ตœ์‹  ์ปค๋ฐ‹์ด ์žˆ๋‹ค๋ฉด ๋‚ด๊ฐ€ ์ž‘์—…ํ•œ Feature ๋ธŒ๋žœ์น˜๋ฅผ, ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์ด ์ถ”๊ฐ€๋œ Develop ๋ธŒ๋žœ์น˜์˜ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์œผ๋กœ Rebase ํ•ฉ๋‹ˆ๋‹ค. (๋ง๊ทธ๋Œ€๋กœ base๋ฅผ ๋ฐ”๊พผ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค)
$ git checkout Feature/[๋ธŒ๋žœ์น˜๋ช…]
$ git rebase develop
  1. ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด, ์—๋””ํ„ฐ์—์„œ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•œ ๋’ค ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
$ git add .
$ git rebase --continue
  1. ์ด์ƒ์ด ์—†๋‹ค๋ฉด Feature ๋ธŒ๋žœ์น˜๋ฅผ push ํ•ฉ๋‹ˆ๋‹ค.
$ git push origin Feature/[๋ธŒ๋žœ์น˜๋ช…]
  1. Github์—์„œ PR์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. PR ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ์ฑ„์›Œ์ฃผ์„ธ์š”.
## Feature Description

- ์ด๋Ÿฐ ์ด๋Ÿฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค

## To Reviewers

- ์ด๋Ÿฐ ์ด๋Ÿฐ ์ ์„ ์œ ์˜ํ•ด์ฃผ์„ธ์š”
  1. Review ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

  2. Self Merge ํ•ด์ฃผ์„ธ์š”.

  3. Squash Merge๋˜๋ฉฐ, Merge๋œ Feature Branch๋Š” ์ž๋™ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

  4. ๋กœ์ปฌ์—์„œ Develop ๋ธŒ๋žœ์น˜๋กœ ์ฒดํฌ์•„์›ƒํ•œ ๋’ค Pullํ•˜๊ณ , ์ƒˆ๋กœ์šด Feature ๋ธŒ๋žœ์น˜๋กœ ๋ถ„๊ธฐํ•˜์—ฌ ๋‹ค์Œ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”.

3. ์ฝ”๋“œ ๋ฆฌ๋ทฐ

  1. PR ์‹œ sookyeongyeom์„ Reviewer๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋ฉด Request Changes๋กœ ์ฝ”๋“œ ์ˆ˜์ •์„ ์š”์ฒญ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
  3. ์ด์ƒ์ด ์—†์œผ๋ฉด Approve ํ•ฉ๋‹ˆ๋‹ค.
  4. Approve๋œ PR์„ ์ฝ”๋“œ์ž‘์„ฑ์ž๊ฐ€ Self Merge ํ•ฉ๋‹ˆ๋‹ค.

4. ๋ธŒ๋žœ์น˜ ์ด๋ฆ„ ์ปจ๋ฒค์…˜

Feature/[๊ธฐ๋Šฅ์š”์•ฝ]

- ๋งจ ์ฒซ๊ธ€์ž F๋งŒ ๋Œ€๋ฌธ์ž๋กœ, ๊ธฐ๋Šฅ์š”์•ฝ์€ ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”
- ๊ธฐ๋Šฅ์š”์•ฝ์€ ์˜์–ด๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”

ex) Feature/modal-publishing

5. ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ์ปจ๋ฒค์…˜

<ํƒœ๊ทธ>: <์ œ๋ชฉ>

- : ๋’ค์—๋งŒ ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค
- ์ œ๋ชฉ์€ ํ•œ์˜ ํ˜ผ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค (๊ฐ€๊ธ‰์  ์˜์–ด๋กœ)
- ํƒœ๊ทธ์˜ ์ฒซ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”
- ํƒœ๊ทธ๋Š” ์•„๋ž˜์— ์ ํžŒ ๊ฒƒ๋“ค๋งŒ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”

Feat: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€, ๊ธฐ๋Šฅ ๋กœ์ง ๋ณ€๊ฒฝ
Fix: ๋ฒ„๊ทธ ์ˆ˜์ •
Refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (๊ธฐ๋Šฅ ๋ณ€ํ™” X)
Style: ์ฝ”๋“œ ํฌ๋งทํŒ…, ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ์—†๋Š” ๊ฒฝ์šฐ
Chore: ๋นŒ๋“œ ์—…๋ฌด ์ˆ˜์ •, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ •
Docs: ๋ฌธ์„œ ์ˆ˜์ •, ์ฃผ์„

5. ์ฝ”๋“œ ์ปจ๋ฒค์…˜

1. EsLint ๊ด€๋ จ

EsLint Rule์„ ์ž„์˜๋กœ ํ•ด์ œํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”.

2. Type ๊ด€๋ จ

  1. Props Type ์„ ์–ธ ์‹œ Type์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”. (Interface X)
  2. Props Type์˜ ์ด๋ฆ„์€ [์ปดํฌ๋„ŒํŠธ์ด๋ฆ„]+Props ์˜ ํ˜•์‹์œผ๋กœ ์ง€์–ด์ฃผ์„ธ์š”.
type HeaderProps = {
  onOpenDrawer: (e: React.MouseEvent) => void;
};

type PublicationBoxElementProps = {
  title: string;
  writer: string;
  img: string;
  pdf: string;
};
  1. Interface ์„ ์–ธ ์‹œ, ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉํ•  ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ๋ฉด ์ ‘๋‘์‚ฌ I๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”.

3. Constant ์ •์˜ ์‹œ

๊ฐ์ฒด๋กœ ์ •์˜ํ•˜๋˜, as const ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ read-only ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”.

export const Paths = {
  new: '/new',
  newComplete: '/new/complete',
  main: '/main',
  reply: '/reply',
  replyComplete: '/reply/complete',
  view: '/view',
} as const;

4. styled-components ๊ด€๋ จ (1) - Type ์ปจ๋ฒค์…˜

styled-components ๋ฅผ ์œ„ํ•œ Props Type ์„ ์–ธ ์‹œ ์ผ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ์˜ Props Type์ฒ˜๋Ÿผ ๋ณ„๊ฐœ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ , ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. (์ถ”ํ›„ ์žฌ์‚ฌ์šฉ ์šฉ์ด)

// ์ž˜๋ชป๋œ ์˜ˆ์‹œ

// @types/styled.d.ts
type FAQBoxProps = {
  isOpen: boolean;
};

// components/FAQBox.tsx
export const FAQBox = styled.div<FAQBoxProps>`
  opacity: ${(props) => (props.isOpen ? 1 : 0)};
`;
// ์˜ฌ๋ฐ”๋ฅธ ์˜ˆ์‹œ

// @types/styled.d.ts
type IsOpenType = {
  isOpen: boolean;
};

// components/FAQBox.tsx
export const FAQBox = styled.div<IsOpenType>`
  opacity: ${(props) => (props.isOpen ? 1 : 0)};
`;
// Type ์กฐํ•ฉ ์˜ˆ์‹œ

// @types/styled.d.ts
type IsOpenType = {
  isOpen: boolean;
};

type IsFixedType = {
  isFixed: boolean;
};

// components/FAQBox.tsx
export const FAQBox = styled.div<IsOpenType & IsFixedType>`
  opacity: ${(props) => (props.isOpen ? 1 : 0)};
  opacity: ${(props) => props.isFixed && 1};
`;

5. styled-components ๊ด€๋ จ (2) - namespace S ์‚ฌ์šฉ

styled-components๋Š” ์‚ฌ์šฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ ๋‚ด๋ถ€์— ์ž‘์„ฑํ•˜๋˜, namespace S ์•ˆ์— ์ •์˜ํ•˜์—ฌ ์ฃผ์„ธ์š”. ์ผ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ์™€ ์‰ฝ๊ฒŒ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

// ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ
  return (
    <S.Container>
      <S.Wrapper isFocus={isFocus} isError={false}>
        <input
          placeholder={placeHolder}
          onFocus={onFocus}
          onBlur={onBlur}
          value={value}
          onChange={onChange}
        />
      </S.Wrapper>
      <IconButton svgIcon={svgCircleX} onClick={onClickRemove} />
    </S.Container>
  );
}

namespace S {
  export const Container = styled.div`
    display: flex;
    align-items: center;
    gap: 1.15rem;
    padding-right: 0.75rem;
    flex-grow: 1;
  `;

  export const Wrapper = styled.div`
    display: flex;
    align-items: center;
    gap: 1.15rem;
    padding-right: 0.75rem;
    flex-grow: 1;
  `;
}

์ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ, ์žฌ์‚ฌ์šฉํ•  styled-components๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

// styles/styled.ts
export namespace SC {
  export const HeaderContainer = styled.header`
    background: ${Colors.white};
    border-bottom: 0.1rem solid ${Colors.gray200};
    height: ${Styles.headerHeight};
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 2.4rem;
  `;

  export const HeaderLogo = styled.h1``;

  export const NewMainContainer = styled.div`
    background-color: ${Colors.white};
    border-radius: 0.8rem;
    border: 0.1rem solid ${Colors.gray200};
    padding: 4rem;
  `;
}

6. px - rem ๊ด€๋ จ

1rem = 10px๋กœ ์„ค์ •ํ•ด๋‘” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
px์ด ์•„๋‹Œ rem์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.

About

๐Ÿš€ PLAYIDEA WEB PAGE

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •