[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] React Intro

JiEunยท2023๋…„ 3์›” 22์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

React๋ž€ ๋ฌด์—‡์ด๊ณ  ์™œ ์‚ฌ์šฉํ•˜๊ณ  ์žฅ์ ์ด ๋ฌด์—‡์ธ์ง€, ์‚ฌ์šฉ์‹œ ์ฃผ์˜์  ๋“ฑ์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.


๐Ÿ“์•Œ๊ฒŒ ๋œ ๊ฒƒ

โœ”๏ธ React

  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์„ ์–ธ์ ์ด๊ณ  ํšจ์œจ์ ์ด๊ณ  ์œ ์—ฐํ•œ Javascript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • React๋กœ web app์„ ๋งŒ๋“ ๋‹ค.
  • DOM๊ณผ ๋‹ฌ๋ฆฌ CSS, JSX๋ฌธ๋ฒ•๋งŒ ๊ฐ€์ง€๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    Javascript๋งŒ์œผ๋กœ ๋งˆํฌ์—… ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด DOM์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
    Javascript๋ฌธ๋ฒ• + HTML ๋ฌธ๋ฒ• ๋™์‹œ์— ์‚ฌ์šฉ

const MyInfo = () = {
	return (
    <div>{๋ณ€์ˆ˜๋ช…}</div>
  )
}

const App = () => {
	return(
    	<MyInfo />
    )
}

export { App }

Web APP

  • ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์ง„ํ–‰๋œ๋‹ค.
  • ๋ชจ๋ฐ”์ผ ์•ฑ์œผ๋กœ ๋ฐœํ–‰ํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ์•ฑ์ฒ˜๋Ÿผ ๋›ฐ์–ด๋‚œ UX
  • ๋กœ๋”ฉ ์†๋„๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋น„์ฆˆ๋‹ˆ์Šค์  ๊ฐ•์ ์ด ์žˆ๋‹ค.

โœ”๏ธ React ํŠน์ง•

  1. ์„ ์–ธํ˜•(Declarative)
  2. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜(component-Based)
  3. ๋ฒ”์šฉ์„ฑ(๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ํ™œ์šฉ)

1. ์„ ์–ธํ˜•(Declarative)

  • ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ JSX๋ฅผ ํ™œ์šฉํ•œ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•œ๋‹ค.

2. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜(Component-Based)

  • ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด๋‘” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ
  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•  ๊ฒฝ์šฐ : ์„œ๋กœ ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    ๋…๋ฆฝ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ >> ์œ ์ง€๋ณด์ˆ˜ ์ง‘์ค‘ ๊ฐœ๋ฐœ์— ์šฉ์ด

3. ๋ฒ”์šฉ์„ฑ(Learn Once, Write Anywhere)

  • Javascript ํ”„๋กœ์ ํŠธ ์–ด๋””์—๋“  ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
  • Facebook์—์„œ ๊ด€๋ฆฌ๋˜์–ด ์•ˆ์ •์ ์ด๊ณ  ์œ ๋ช…ํ•˜๋‹ค.
  • ๋ฆฌ์—‘ํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

    ๋ฆฌ์—‘ํŠธ๋Š” ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—๋„ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ JSX

  • HTML, JS๊ฐ€ ๊ฒฐํ•ฉํ•œ ๋ฌธ๋ฒ•์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ง๊ด€์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋ฅธ ๊ธฐ์ˆ ์„ ํ•œ ๊ณณ์— ๋ชจ์•„ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.
  • JSX๋Š” HTML์ด ์•„๋‹ˆ๋‹ค.
  • JSX๋ฅผ ์• ์šฉํ•ด React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

    ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” Javascript ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ์— ๋ณ€ํ™˜ํ•ด ์ค˜์•ผํ•œ๋‹ค. >> 'Babel'์„ ์‚ฌ์šฉํ•ด์ค€๋‹ค.

Babel

  • JSX๋ฅผ Javascript๋กœ ์ปดํŒŒ์ผ ํ•œ๋‹ค.

    ์ปดํŒŒ์ผ ํ›„ Javascript๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ๊ณ  ํ™”๋ฉด์— ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ JSX ๊ทœ์น™

1.ํ•˜๋‚˜์˜ ์—˜๋ฆฌ๋จผํŠธ์•ˆ์— ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ๋ฌถ์—ฌ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • ์—ฌ๋Ÿฌ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ์ตœ์ƒ์œ„์—์„œ opening tag, closing tag๋กœ ๊ฐ์‹ธ์ค˜์•ผ ํ•œ๋‹ค.
<div> //opening tag
  <div></div>
  <div></div>
</div> //closing tag

2. ์—˜๋ฆฌ๋จผํŠธ ํด๋ž˜์Šค ์‚ฌ์šฉ์‹œ className์œผ๋กœ ํ‘œ๊ธฐ

  • CSS class ์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ className์œผ๋กœ ํ‘œ๊ธฐํ•ด์•ผํ•œ๋‹ค.
  <div className=''></div>

class๋กœ ์ž‘์„ฑ์‹œ Javascript class๋กœ ๋ฐ›์•„๋“ค์ธ๋‹ค.

3. Javascript ํ‘œํ˜„์‹ ์‚ฌ์šฉ์‹œ ์ค‘๊ด„ํ˜ธ{} ์‚ฌ์šฉ

  • Javascript์‚ฌ์šฉ์‹œ { }์„ ์‚ฌ์šฉํ•œ๋‹ค.
function App(){
	const name = "JiEun";
    return(
    	<div>Hello, {name}</div>
    )
}

{} ์‚ฌ์šฉ ์•ˆํ•˜๋ฉด ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ธ์‹

4. ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค.(PascalCase)

  • React ์—˜๋ฆฌ๋จผํŠธ JSX๋กœ ์ž‘์„ฑ๋˜๋ฉด HTML ์—˜๋ฆฌ๋จผํŠธ์™€ ๊ตฌ๋ถ„ ๋˜๋„๋ก ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค.

  • ์‚ฌ์šฉ์ž ์ปดํฌ๋„ŒํŠธ : ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑ๋จ JSX ์ปดํฌ๋„ŒํŠธ

function Hello(){
	return <div>...</div>
}

function HelloWorld(){
	return <Hello />
}

5. ์—ฌ๋Ÿฌ HTML ํ‘œ์‹œํ•  ๊ฒฝ์šฐ map()ํ•จ์ˆ˜ ์ด์šฉ

  • map() ์‚ฌ์šฉ์‹œ ๋ฐ˜๋“œ์‹œ key JSX์†์„ฑ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค.
  • key ์†์„ฑ : map() ๋‚ด๋ถ€์˜ ์ฒซ๋ฒˆ์งธ ์—˜๋ฆฌ๋จผํŠธ์— ์ถ”๊ฐ€ํ•œ๋‹ค. (๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ณตํ•˜๋Š” id๋ฅผ ํ• ๋‹น)
const content = dummyData.map((data) => {
	<div key={data.id}>
    	<h3>{dada.tit}</h3>
    </div>
})

map ์‚ฌ์šฉ์‹œ key ์ถ”๊ฐ€

์ปดํฌ๋„ŒํŠธ

  • ๊ตฌ์กฐ์™€ ๋™์ž‘์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ญ‰์น˜๋กœ ์ ์„ ์ฝ”๋“œ์…‹ (๊ตฌ์กฐ, ๋™์ž‘)
function App(){
	const user = {..., ...}
    
    function userName(user){
      return ์‹คํ–‰ ์ฝ”๋“œ
    }
  	
  	return(
    	<div>
      		<h1>Hello {userName(user)}</h1>
      	</div>
    )
}
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ์™€ ๋™์ž‘์„ ํ•œ ๋ˆˆ์— ํŒŒ์•…, ๊ตฌ์กฐ๋ฅผ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.

  • UI ๊ตฌ์„ฑํ•˜๋Š” ํ•„์ˆ˜ ์š”์†Œ

    JSX์—†์ด Reat์š”์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด ์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

  • ๋ฆฌ์—‘ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ๊ด€๊ณ„๋ฅผ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ํ˜•์ƒํ™”ํ•ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ํŠธ๋ฆฌ๊ตฌ์กฐ๋กœ ํ˜•์ƒํ™”

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ตœ์†Œ ํ•œ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ–๋Š”๋‹ค.

  • ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ์ž ๊ณ ์œ ์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  UI์˜ ํ•œ ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•œ๋‹ค.

SPA

  • ์‹ฑํ”Œ ํŽ˜์ด์ง€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜

create React APP

  • ๋ฆฌ์—‘ํŠธ SPA๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ํˆด์ฒด์ธ
npx create-react-app ํด๋”๋ช…
npx create-react-app@lastest ํด๋”๋ช…

โœ๏ธ ๋งˆ์น˜๋ฉฐ

ํ”„๋ก ํŠธ์—”๋“œ์˜ ๊ฝƒ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์œ ๋ช…ํ•œ
React๋กœ ๋“ค์–ด๊ฐ”๋‹ค.

์ฒ˜์Œ ์ ‘ํ–ˆ์„ ๋• HTML + Javascript๊ฐ€ ํ•ฉ์ณ์ง„ ๋ชจ์Šต ๊ฐ™๊ณ 
์ €์žฅ ํ•˜์ž๋งˆ์ž ์ƒˆ๋กœ๊ณ ์นจ ๋˜๋Š” ์ ์—์„œ ์ข‹์•˜๋‹ค.

React์˜ ์žฅ์ •์€ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ ์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.
์•„์ง์€ ์ฒซ ๋‹จ๊ณ„๋กœ ๊ฐ„๋‹จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์žฌ๋ฐŒ๋‹ค.

์ด์ „ ํ•™์Šต์€ ์ด๋ก ์ด ๋งŽ์•˜๋‹ค๋ฉด ์ด๋ฒˆ ํ•™์Šต์€ ์‹ค์Šต ์œ„์ฃผ๊ฐ€ ๋งŽ์€๊ฑฐ ๊ฐ™๋‹ค.

Javascript ๊ธฐ์ดˆ๊ฐ€ ํ™•์‹คํžˆ ์ค‘์š”ํ•˜๋‹ค ์ƒ๊ฐํ•ด
Javascript์— ๋Œ€ํ•œ ๊ณต๋ถ€๋„ ๋†“์น˜์ง€ ์•Š๋„ ํ‹ˆํ‹ˆ์ด ๊ณต๋ถ€ํ•ด์•ผ ๊ฒ ๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

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