โœ๐Ÿป [Code Camp_TIL] 2์ผ์ฐจ: React์˜ ์žฅ์ , React Component, React-hooks

code_Jยท2023๋…„ 3์›” 19์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
2/41
post-thumbnail

React๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์ด์œ 


1์ผ์ฐจ์— React์—์„œ html, css๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์งค ์ˆ˜ ์žˆ๊ณ , tag ์ด๋ฆ„์„ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์–ด์„œ ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ข‹์•„์ง„๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.


ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ๋กœ๋Š” React, Vue, Angular๊ฐ€ ์žˆ๋‹ค. Vue์™€ Angular๋„ React์ฒ˜๋Ÿผ ๋ถ€ํ’ˆ ์กฐ๋ฆฝ ๋ฐฉ์‹์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์™œ ํ•˜ํ•„ ๋ฆฌ์•กํŠธ๋ฅผ ์จ์•ผ ํ• ๊นŒ?

๋งŽ์€ ์‚ฌ์šฉ์ž ์ˆ˜

๋ฐ”๋กœ React ์œ ์ €๊ฐ€ Vue๋‚˜ Angular ์œ ์ €๋ณด๋‹ค ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์œ ์ €๊ฐ€ ๋งŽ๋‹ค๋Š” ๊ฑด ๋ฐฐ์šธ ์ž๋ฃŒ๋„ ๋งŽ๊ณ , ์งˆ๋ฌธ๊ณผ ๊ฒ€์ƒ‰์ด ์‰ฝ๋‹ค๋Š” ๊ฑธ ์˜๋ฏธํ•œ๋‹ค.

์›น, ์•ฑ, pc์•ฑ์„ ๋‹ค ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค?!

React๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›น, ์•ฑ, pc์•ฑ์„ ๋ชจ๋‘ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. React๋กœ ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” React-native๋Š” React์™€ ๊ต‰์žฅํžˆ ์œ ์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— React๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด ๊ธˆ๋ฐฉ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ Electron์„ ํ™œ์šฉํ•˜๋ฉด React๋กœ ๋งŒ๋“  ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐ์Šคํฌํƒ‘ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‹คํ–‰๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ React-native๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ์ด์–ด์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ์ „์šฉ ์•ฑ๊ณผ, IOS ์ „์šฉ ์•ฑ์„ ํ•œ๋ฒˆ์— ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

React Component

React์—์„œ๋Š” ๋ถ€ํ’ˆ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ ธ์™€์„œ ์“ฐ๋Š” ๋ฐฉ์‹์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ถ€ํ’ˆ์„ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•œ๋‹ค. UI ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋ถ€ํ’ˆํ™”ํ•ด์„œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋กœ ํฐ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ, ์‹œ๊ฐ„์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋”ฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ณต์‚ฌ&๋ถ™์—ฌ๋„ฃ๊ธฐ์™€๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ ธ๊ฐ€์„œ ์“ฐ๋Š” ๊ฒƒ์€ ๊ฐ™์ง€๋งŒ, ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” import๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์ผ๋ถ€๋ฅผ ํ•˜๋‚˜๋งŒ ๋ฐ”๊พธ๊ธฐ๋งŒ ํ•˜๋ฉด, ๋‚˜๋จธ์ง€์˜ ์ปดํฌ๋„ŒํŠธ๋„ ์ž๋™์œผ๋กœ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ผ์ด ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์—์„œ ๋ณต์‚ฌ&๋ถ™์—ฌ๋„ฃ๊ธฐ์™€๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ์ค€์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•˜๊ธฐ ๋‚˜๋ฆ„์ด๋‹ค. ํŽ˜์ด์ง€ ํ•˜๋‚˜๋„ ๊ทธ ์ž์ฒด๋กœ ํฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค(ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ๋ผ ํ•จ).

์ปดํฌ๋„ŒํŠธ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• 2๊ฐ€์ง€: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ vs ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ


ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ๋ณต์žกํ•ด์„œ ์ž˜ ์“ฐ์ง€ ์•Š๋Š” ์ถ”์„ธ๋‹ค. ํ•˜์ง€๋งŒ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋†“๊ณ  ์œ ์ง€ํ•˜๊ฑฐ๋‚˜, ํด๋ž˜์Šคํ˜•์œผ๋กœ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ๋ถ€๋ถ„๋ถ€๋ถ„ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ์•Œ์•„๋†“์•„์•ผ ํ•œ๋‹ค.

import { Component } from "react";

class New extends Component {
  render() {
    return <div>์ด๊ฒƒ์€ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ</div>
  }
}

export default New

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ

use๋กœ ์‹œ์ž‘ํ•˜๋Š” react-hook์„ ํŽ˜์ด์Šค๋ถ์—์„œ ์ œ๊ณตํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ ํ•จ์ˆ˜๋ฅผ ์ปดํฌ๋„ŒํŠธ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ์•ž์— export default๋ฅผ ๋ถ™์—ฌ์„œ ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค. ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ๋น„๊ตํ•˜๋ฉด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ๊ทผ ๋งŽ์€ ๊ธฐ์—…์—์„œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

function New() {
  return <div>์ด๊ฒƒ์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ</div>
}

export default New

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ๋„ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

const New = () => <div>์ด๊ฒƒ์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ</div>

export default New

React-hooks

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ธด ํ•˜์ง€๋งŒ, ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ‰๋‚ด๋‚ด์ง€๋Š” ๋ชปํ•œ๋‹ค. ๊ทธ๋ž˜์„œ React์—์„œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋„ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์ฒ˜๋Ÿผ ๊ธฐ๋Šฅํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด Hooks(ํ›…)์ด๋ผ๋Š” ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

Hooks๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋ฉฐ, useState, useEffect ์ฒ˜๋Ÿผ ์•ž์— โ€˜useโ€™๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•œ๋‹ค.

state, setState, useState

state: ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๋ณ€์ˆ˜(state)
setState: ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜(state)๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ธฐ๋Šฅ
useState: ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜(state)๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ


React ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” let, const, var๊ฐ€ ์•„๋‹Œ ๋ฆฌ์•กํŠธ ์ „์šฉ ๋ณ€์ˆ˜ state๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. let, const์™€ state๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ count๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ๊ฐ ๋น„๊ตํ•ด๋ณด์ž.

let, const

let count = 0;      const count = 0;

state

const[count, setCount] = useState(0)

useState ์†Œ๊ด„ํ˜ธ ์•ˆ์—๋Š” ๋ณ€์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•ด์ค€๋‹ค!



๋‹ค์Œ์œผ๋กœ๋Š” let, const์™€ state์˜ ๋ณ€์ˆ˜๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์„ ๋น„๊ตํ•ด๋ณด์ž.


const๋Š” ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€ํ•˜๋ฏ€๋กœ let๋งŒ ์žฌํ• ๋‹น์„ ํ•ด์ค€๋‹ค.

let count = 0; count = 5; 

state๋Š” setCount์— 5๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด, count์— 5๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

Const [count, setCount] = useState(0)
setCount(5)

state, setState, useState๋Š” ์–ธ์ œ ์“ฐ์ผ๊นŒ?

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ด์ฃผ๋ฉด, ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ข€ ๋” ๋””ํ…Œ์ผํ•˜๊ฒŒ ๊ฒ€์ฆ(๋ณด์•ˆ ๋“ฑ)ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’๋“ค์€ state์— ์ €์žฅ๋˜๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์‹ค๋ฌด์—์„œ๋Š” ํšŒ์›๊ฐ€์ž…, ๊ฒŒ์‹œ๋ฌผ์ž‘์„ฑ ๋‚ด์šฉ ๋“ฑ์„ ์„œ๋ฒ„์ปดํ“จํ„ฐ์— ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€์ˆ˜์— ๋‹ด์•„๋‘˜ ๋•Œ ํ˜น์€ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ ๊ฒ€์ฆํ•˜๊ณ  ์ž˜๋ชป๋œ ๋ถ€๋ถ„์„ ๋‹ค๋ฅธ์ƒ‰์œผ๋กœ ํ‘œ๊ธฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.




profile
Web FE ๊ฐœ๋ฐœ์ž ์ทจ์ค€์ƒ

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