React start

arrrrrrยท2023๋…„ 1์›” 23์ผ

React ๊ณต๋ถ€์ค‘ ๐ŸŽฝ

๋ชฉ๋ก ๋ณด๊ธฐ
5/16

์˜ค๋Š˜์€ ์—ฐํœด๊ฐ€ ๋๋‚œ ๋’ค ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘๋  React๋ฅผ ์˜ˆ์Šตํ–ˆ๋‹ค.
์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋Š” ์ดํ•ด๋˜์—ˆ๊ณ  props, router ๋“ฑ์€ ๊ฐ๋งŒ ์žกํ˜”๋‹ค.
๊ณต์‹๋ฌธ์„œ๋Š” ์ด๋ฒˆ ๊ธฐํšŒ์— ์ฒ˜์Œ์œผ๋กœ ์ œ๋Œ€๋กœ ์ฝ๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์˜์™ธ๋กœ ์žฌ๋ฐŒ๋Š”๊ฑธ ๐Ÿค“

ํ•™์Šต ๋‚ด์šฉ

โœ“ React๋ฅผ ๋น„๋กฏํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”?

๋ณ€ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ˆ˜์ •์˜ ๋Šช์— ๋น ์ง€์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ์—ฌ๊ธฐ์— ๊ฐ€์žฅ ๋งŽ์ด ๊ธฐ์—ฌํ•˜๋Š” react ํŠน์„ฑ์ด ์ปดํฌ๋„ŒํŠธ๋‹ค. ui๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ html์„ ๋œฏ์–ด๊ณ ์น˜๋Š” ๊ณผ์ • ์—†์ด ์กฐ๋ฆฝ๋งŒ ๋‹ค์‹œํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ!

โœ“ ์ปดํฌ๋„ŒํŠธ๋ณ„ ํŒŒ์ผ๊ด€๋ฆฌ

๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ํŒŒ์ผ์„ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ณดํŽธ์ ์ด๋‹ค. ์ด๋กœ์ธํ•ด ๊ฐœ๋ฐœ์ž๋Š” ํŠน์ • ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋А ๊ฒƒ์„ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ์ผ๊ตฌ์กฐ
/ 
โ”œโ”€โ”€ /Twittler React SPA
โ”‚   โ”œโ”€โ”€ README.md
โ”‚   โ”œโ”€โ”€ /public                        # create-react-app์ด ๋งŒ๋“ค์–ด๋‚ธ ํŒŒ์ผ, yarn/npm start๋กœ ์‹คํ–‰ํ•  ์‹œ์— ์“ฐ์ž…๋‹ˆ๋‹ค
โ”‚   โ””โ”€โ”€ /src                           # React ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ํด๋”
โ”‚        โ”œโ”€โ”€ static                    # dummyData๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ํด๋”
โ”‚        โ”‚    โ””โ”€โ”€ dummyData.js
โ”‚        โ”œโ”€โ”€ Pages                     # ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ํด๋”
โ”‚        โ”‚    โ”œโ”€โ”€ About.css
โ”‚        โ”‚    โ”œโ”€โ”€ About.js
โ”‚        โ”‚    โ”œโ”€โ”€ MyPage.css
โ”‚        โ”‚    โ”œโ”€โ”€ MyPage.js
โ”‚        โ”‚    โ”œโ”€โ”€ Tweets.css
โ”‚        โ”‚    โ””โ”€โ”€ Tweets.js
โ”‚        โ”œโ”€โ”€ App.css
โ”‚        โ”œโ”€โ”€ App.js
โ”‚        โ”œโ”€โ”€ Footer.js
โ”‚        โ”œโ”€โ”€ index.js
โ”‚        โ””โ”€โ”€ Sidebar.js
โ”œ  package.json
โ”” .gitignore

โœ“ React์˜ render ๊ตฌ์กฐ

static/index.js์—๋Š” ReactDOM.render()ย ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค.

ReactDOM.render(<App />, document.getElementById('root'));
  • ๋ Œ๋”๋งํ•˜๊ธฐ ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ. ์—ฌ๊ธฐ์„œ๋Š”ย <App />
  • ๋ Œ๋”๋ง ๋˜๊ธธ ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์ด ํฌํ•จ๋œ DOM ์š”์†Œ. ์—ฌ๊ธฐ์„œ๋Š”ย root๋ผ๋Š” ID๋ฅผ ๊ฐ€์ง„ ์š”์†Œ

root๋Š” public/index.html ํŒŒ์ผ์˜ <body>ย ๋‚ด๋ถ€์—ย <div id='root'>ย ์š”์†Œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, App์ด ๋ Œ๋”๋ง๋˜๋ฉด div์˜ ํ•˜์œ„ ์š”์†Œ๋กœ ์ž‘์„ฑํ•œ ํƒœ๊ทธ๋“ค์ด ๋“ค์–ด๊ฐ„๋‹ค.

โœ“ return๋ฌธ์˜ ์˜๋ฏธ

๊ฐ ์ปดํฌ๋„ŒํŠธ(ํ•จ์ˆ˜)์˜ ๋ฆฌํ„ด๋ฌธ ์•ˆ์—๋Š” html์— ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์€ ํƒœ๊ทธ๋“ค์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

โœ“ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฌด์กฐ๊ฑด ์ข‹์€๊ฐ€?

์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’๋‹ค. ํ•˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๋• ์ด๋Ÿฌํ•œ ์ ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

โœ“ import, export

๊ฐ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์„ ๋ณด๋ฉด ์ƒ๋‹จ์— import๋ฌธ์ด ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค. {์ค‘๊ด„ํ˜ธ}๋กœ ๋ถˆ๋Ÿฌ์˜จ import๋ฌธ์€ ๋ญ์ง€ ํ–ˆ๋Š”๋ฐ, export์˜ ์ฐจ์ด์˜€๋‹ค.
export๋ฅผ defalt๋กœ ์ฃผ๋ฉด React๋ฌธ์ฒ˜๋Ÿผ importํ•ด์˜ค๊ณ ,
export๋ฅผ {dummyTweets} ํ˜•ํƒœ๋กœ ์ฃผ์—ˆ์œผ๋ฉด {dummyTweets}๋กœ importํ•œ๋‹ค.
from์ด ์—†๋Š” import๋Š” ์›นํŒฉ์ด๋‹ค.

import React from 'react';
import { dummyTweets } from '../static/dummyData';
import './Tweets.css';

๋‚ด์ผ์€ props, router ๊ณต๋ถ€ํ•˜๊ณ  ๊ณผ์ œ๋„ ๋ฏธ๋ฆฌ ํ•ด๋ด์•ผ๊ฒ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•™์Šต์ค‘์— ํ‚ค์›Œ๋“œ๋Š” ๋ฐ”๋กœ ์ ์–ด๋†”์•ผ๊ฒ ๋‹ค. (ํ•˜๋ฃจ๋„ ์ฑ„ ์ง€๋‚˜์ง€ ์•Š์•˜๋Š”๋ฐ ๋งŽ์ด ๊นŒ๋จน์€ ๊ฒƒ ๊ฐ™๋‹ค.. ๐Ÿฅฒ)

profile
โ›ฑ

0๊ฐœ์˜ ๋Œ“๊ธ€