3.24 [React_Props & State]

Leeยท2023๋…„ 3์›” 24์ผ
0

์˜ค.๋ฐฐ.์ด.์•ˆ& ํšŒ๊ณ 

๋ชฉ๋ก ๋ณด๊ธฐ
27/46
post-thumbnail

3.24 [React_Props & State] ํ—ท๊ฐˆ๋ ค! ๐Ÿคฏ


์˜ค๋ฐฐ์ด์•ˆ ๐Ÿช™


Props ๐Ÿคฏ

Props ๋Š” Properties ์˜ ์ค„์ž„๋ง์ด๊ณ , ์ปดํผ๋„ŒํŠธ์˜ ์†์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค.
์ƒ์œ„ ์ปดํผ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํผ๋„ŒํŠธ๋กœ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์ด๋‹ค.

ํŠน์ง•

  • ๊ฐ์ฒด ํ˜•ํƒœ๋ฅผ ๊ฐ–๋Š”๋‹ค.
  • ์ƒ์œ„์—์„œ ํ•˜์œ„๋กœ ๋‹จ๋ฐฉํ–ฅ์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ–๋Š”๋‹ค. โฌ‡๏ธโญ๏ธ
  • Props ๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ์ฝ๊ธฐ ์ „์šฉ ๊ฐ’์ด๋‹ค. โญ๏ธ
    ์ฝ๊ธฐ ์ „์šฉ ๊ฐ’์ด ์•„๋‹ˆ๋ผ๋ฉด props๋ฅผ ์ „๋‹ฌ๋ฐ›์€ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ props๋ฅผ ์ง์ ‘ ์ˆ˜์ • ์‹œ props๋ฅผ ์ „๋‹ฌํ•œ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐ’์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋‹จ๋ฐฉํ–ฅ์  ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ์œ„๋ฐฐ ๋จ

How to use Props ๐Ÿ˜Ž

Props๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ˆœ์„œ



1. ๋ถ€๋ชจ์˜ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณด๋‚ผ ๊ฐ’๊ณผ ์†์„ฑ์„ ์ •์˜ํ•œ๋‹ค.

<Child user ={'๋‚˜๋Š”' + userName }/> 
  • ์†์„ฑ = user
  • ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์€ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์‹ธ์ค€๋‹ค {'๋‚˜๋Š”' + userName }

2. ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ์ธ์ž์— props๋ฅผ ์ฃผ๊ณ  ๋‚ด๋ถ€์—๋„ props์™€ ์†์„ฑ์„ ์ „๋‹ฌํ•œ๋‹ค.

function Child(props){
return (
  <div>
    <p>{props.user}</p>
  </div>
  )}
  • ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ์ „๋‹ฌ์ธ์ž์— props ๋ฅผ ์ ์œผ๋ฉด ์ด props ๊ฐ€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • props๊ฐ€ ๊ฐ์ฒด์ด๋‹ˆ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ํ˜•ํƒœ์ธ{key : value}์™€ ๋™์ผํ•œ ํ˜•ํƒœ๋ฅผ ๋ ๊ฒŒ ๋œ๋‹ค.
    ์œ„์˜ ์˜ˆ์‹œ์˜ props ๊ฐ์ฒด ํ˜•ํƒœ๋กœ๋Š” {user : '๋‚˜๋Š”'+ userName} ํ˜•ํƒœ์ธ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ dot notation์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. {props.user}

3. ์ „๋‹ฌ๋ฐ›์€ props๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

Props children ๐Ÿ˜Ž

Props ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์ด๋‹ค.

๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Š” ํƒœ๊ทธ์™€ ๋‹ซ๋Š” ํƒœ๊ทธ ์‚ฌ์ด์— ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ๋ ค๋ฉด ์†์„ฑ๋ช…์„ children ์œผ๋กœ ์ž‘์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.


State ๐Ÿคฏ

State ๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์˜๋ฏธํ•˜๊ณ , State(์ƒํƒœ) ๋Š” React state ๋กœ ๋‹ค๋ค„์•ผ ํ•œ๋‹ค.
(props๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’, ์ฝ๊ธฐ ์ „์šฉ ๊ฐ’!)

State hook : useState ๐Ÿ˜Ž

React ์—์„œ stat๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ useState ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

useState ์‚ฌ์šฉ๋ฒ•

1. ์‚ฌ์šฉํ• ๋ ค๋ฉด React ๋กœ ๋ถ€ํ„ฐ useState๋ฅผ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•œ๋‹ค.

import {useState} from 'react';

2. ์ดํ›„ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ useState๋ฅผ ํ˜ธ์ถœํ•ด์ค€๋‹ค. ํ˜ธ์ถœํ•œ๋‹ค๋Š” ๊ฒƒ์€ stat๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ ๊ฒƒ๊ณผ ๊ฐ™๊ณ , ์ด๋ฆ„์€ ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ์ง€์–ด๋„ ๋œ๋‹ค.

useState ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ๊ธธ์ด๊ฐ€ 2์ธ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ๋ฐฐ์—ด[0] ์š”์†Œ๋Š” ํ˜„์žฌ State ๋ณ€์ˆ˜์ด๊ณ 
๋ฐฐ์—ด[1] ์š”์†Œ๋Š” ์ด ๋ณ€์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ ์ด๋‹ค.

function App(){
const [user, isUserCheck] = useState(์ดˆ๊ธฐ๊ฐ’)

user : ํ˜„์žฌ State ๋ณ€์ˆ˜
isUserCheck : state user๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜
useState : state hook
์ดˆ๊นƒ๊ฐ’ : state ์ดˆ๊นƒ๊ฐ’


State ๊ฐฑ์‹ ํ•˜๊ธฐ ๐Ÿ˜Ž

state๋ฅผ ๊ฐฑ์‹ ํ• ๋ ค๋ฉด ํ˜„์žฌ state ๋ณ€์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š” isUserCheck ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค์š”.

๊ฐฑ์‹ ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๋ง์€ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š” ๋ง์ด๋‹ˆ ๋ณดํ†ต์€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด State๋ณ€์ˆ˜๋ฅผ ๊ฐฑ์‹  ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์œ„ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ํด๋ฆญ์ด๋ฒคํŠธ๋ฅผ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉด

ํด๋ฆญ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค? ---> ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ ---> ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€์— ์žˆ๋Š” ํ˜„์žฌ state ๋ณ€์ˆ˜๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š” isUserCheck ๋ฅผ ํ˜ธ์ถœ ---> ํ˜ธ์ถœ๋œ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ user ๋ณ€์ˆ˜๊ฐ€ ๊ฐฑ์‹  ---> ๊ฐฑ์‹ ๋œ user ๋ณ€์ˆ˜๋ฅผ App ์ปดํฌ๋„ŒํŠธ์— ๋„˜๊ฒจ App ์ปดํฌ๋„ŒํŠธ ๋‹ค์‹œ ๋ Œ๋”๋ง

์‚ฌ์ง„์„ ๋ณด๋ฉด์„œ ์˜ˆ์‹œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ผ!
์ฒดํฌ๋ฐ•์Šค๋ฅผ ํด๋ฆญํ• ๋•Œ๋งˆ๋‹ค ์ฝ˜์†”์— rerendered? ๊ฐ€ ์ฐํžˆ๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ๊ฐฑ์‹ ๋œ ํ˜„์žฌ state ๋ณ€์ˆ˜ user ๋กœ ์ธํ•ด App ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ณ„์† ๋ Œ๋”๋ง๋˜๊ณ  ์žˆ๋Š”๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค!

  • ์ฃผ์˜

React state๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ•์ œ๋กœ ๋ณ€๊ฒฝ์„ ์‹œ๋„ํ•˜๋ฉด, ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๊ฑฐ๋‚˜, state๊ฐ€ ์ œ๋Œ€๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • React์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์‚ฌ์šฉ์€ DOM์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์‚ฌ์šฉ ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์ฐจ์ด์ ๋„ ์žˆ๊ธดํ•˜๋‹ค.
  1. React ์—์„œ ์ด๋ฒคํŠธ๋Š” ์†Œ๋ฌธ์ž ๋Œ€์‹  ์นด๋ฉœ ์ผ€์ด์Šค(camelCase) ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  1. JSX ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ํ•จ์ˆ˜๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜(์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ; Event handler)๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

    DOM์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์‚ฌ์šฉ๋ฐฉ์‹

    <button onclick="handleEvent()">Event</button>

    React์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์‚ฌ์šฉ๋ฐฉ์‹

    <button onClick={handleEvent}>Event</button>

Controlled Component ์ด๋ž€? ๐Ÿคฏ

React๋Š” state(์ƒํƒœ) ์ฆ‰, ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์–ดํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— state๋ฅผ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ ์ด๋ฅผ Controlled Component ๋ผ๊ณ  ํ•œ๋‹ค.


์–ด๋–ค ๊ฒƒ์„ ์ƒํƒœ(State) ๋กœ ๋‘์–ด์•ผ ํ• ๊นŒ? ๐Ÿคฏ

์ƒํƒœ๋Š” ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹๋‹ค. ์ƒํƒœ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณต์žกํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ƒํƒœ๋กœ ๋‘์–ด๋„ ๊ดœ์ฐฎ์€์ง€ ํ™•์ธํ•˜๋Š” ๋ฒ• ๐Ÿ˜Ž

  • ๋ถ€๋ชจ๋กœ ๋ถ€ํ„ฐ props๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋Š”์ง€? (Y/N)
  • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ณ€ํ•˜์ง€ ์•Š๋Š”์ง€? (Y/N)
  • ์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ ๋‹ค๋ฅธ state ๋‚˜ props ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•œ์ง€? (Y/N)

๋Œ€๋‹ต์ด Y ๋ผ๋ฉด State ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๐Ÿคข

์ƒํƒœ์˜ ์œ„์น˜? ๐Ÿ˜Ž

์ƒํƒœ(State)๊ฐ€ ํŠน์ • ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์œ ์˜๋ฏธํ•˜๋‹ค๋ฉด ๊ทธ ์ปดํฌ๋„ŒํŠธ์—๋งŒ ์ƒํƒœ๋ฅผ ๋‘๋ฉด ๋˜๋‹ˆ๊นŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ
๋งŒ์•ฝ ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŠน์ • ์ƒํƒœ(State) ์— ์˜์กด์ ์ผ ๊ฒฝ์šฐ์—๋Š”?

๋‘ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ณต๋™์ ์œผ๋กœ ์†Œ์œ ํ•˜๋Š” ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐพ์•„์„œ ๊ฑฐ๊ธฐ์— ์ƒํƒœ๋ฅผ ๋‘์–ด์•ผ ํ•œ๋‹ค!

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