[React] Props์™€ state

์œ ์ง„ยท2023๋…„ 10์›” 28์ผ

๋ฆฌ์•กํŠธ

๋ชฉ๋ก ๋ณด๊ธฐ
3/8

๐Ÿ“ Props๋ž€?

Component์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๊ฐ์ฒด, ๋ฐฐ์—ด ๋“ฑ JavaScript์˜ ์š”์†Œ๋ผ๋ฉด ์ œํ•œ์ด ์—†๋‹ค. (์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜)
์ฃผ๋กœ Component์˜ โ€˜์žฌ์‚ฌ์šฉโ€™์„ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค



๐ŸŽฏ Props์˜ ํŠน์ง•?

  • ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ๋˜์–ด ์‚ฌ์šฉ๋œ๋‹ค. (ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ)
  • Props๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๋‹ค. Props์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค.
  • React Attribute๋Š” ํ˜„์žฌ ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค. ์ดˆ๊ธฐ๊ฐ’์˜ ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด defaultValue, defaultChecked๋กœ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.
  • key๋Š” React์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด Attribute์ด๋‹ค.

    Key
    1) React๊ฐ€ ์–ด๋–ค ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝ, ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œํ• ์ง€
    ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์„ ๋•๋Š”๋‹ค.
    2) ์—˜๋ฆฌ๋จผํŠธ์— ์•ˆ์ •์ ์ธ ๊ณ ์œ ์„ฑ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด ๋‚ด๋ถ€์˜ Element์— ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.
    3) Key๋Š” ๋ฐฐ์—ด ์•ˆ์—์„œ ํ˜•์ œ ์‚ฌ์ด์—์„œ ๊ณ ์œ ํ•ด์•ผ ํ•˜๊ณ  ์ „์ฒด๋ฒ”์œ„์—์„œ ๊ณ ์œ ํ•  ํ•„์š”๋Š” ์—†๋‹ค.
    4) key ์†์„ฑ์ด ์—†์œผ๋ฉด ์ถœ๋ ฅ์€ ์ •์ƒ์ ์œผ๋กœ ๋˜์ง€๋งŒ ์ฝ˜์†”์— ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. React๊ฐ€ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ์ƒ์„ฑ๋œ ๊ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒ์† ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์ž์‹์—์„œ ๋ถ€๋ชจ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค.






๐Ÿ“ state?

State๋Š” Component ๋‚ด์—์„œ ์œ ๋™์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.



๐ŸŽฏ state ํŠน์ง•

  • State๋Š” ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค. (ํ•จ์ˆ˜ ๋‚ด์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ)
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„ํ•œ ๋™์ž‘์— ์˜ํ•ด ๋ณ€ํ•  ์ˆ˜๋„ ์žˆ๊ณ 
    ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋ 
    ์ˆ˜๋„ ์žˆ๋‹ค.
  • State ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๊ณ  ์žฌ๋ Œ๋”๋ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
    ์— React๊ฐ€ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ๋ Œ๋”๋งํ•œ๋‹ค.
  • State ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด React๊ฐ€
    Component๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•  ํƒ€์ด๋ฐ์„
    ์•Œ์•„์ฐจ๋ฆฌ์ง€ ๋ชปํ•œ๋‹ค. ๋ฐ˜๋“œ์‹œ setState ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค.



state ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•

1) setState๋‚ด์— ๋ณ€๊ฒฝํ•  ๊ฐ’ ๋„ฃ๊ธฐ

const [count, setCount] = useState(0);
setCount(count + 1)

2) setState์— ํ•จ์ˆ˜ ๋„ฃ๊ธฐ

const [count, setCount] = useState(0);
setCount((current) => {
	return current + 1
})
  • ํ•จ์ˆ˜๋ฅผ ๋„ฃ๋Š” ๊ฒฝ์šฐ ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜(return)ํ•˜๋Š” ๊ฐ’์œผ๋กœ State๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค.
  • ํ˜„์žฌ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ State๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ ํ•จ์ˆ˜๋ฅผ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•์„ ๊ถŒ์žฅํ•œ๋‹ค.

โ—โ— Object๋ฅผ ๊ฐ–๋Š” State๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 

const [user, setUser] = useState({name: "๋ฏผ์ˆ˜", grade: 1})
setUser((current) => {
	current.grade = 2; // ----> X
	return current;
})

user object ์•ˆ์˜ grade๋ฅผ ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด grade๋Š” ๋ณ€๊ฒฝ๋˜์—ˆ์ง€๋งŒ user ์ž์ฒด๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

const [user, setUser] = useState({name: '๋ฏผ์ˆ˜', grade: 1 })
setUser((current) => {
	const newUser = { ...current }
	newUser.grade = 2 // ----> O
	return newUser
})

๊ธฐ์กด user์˜ ๋‚ด์šฉ์„ ์ƒˆ๋กœ์šด object์— ๋‹ด๊ณ  grade๋ฅผ
๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค.



Props vs State

Props์™€ State์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋กœ Props๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” Props๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์ง€๋งŒ State๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์„ ์–ธํ•˜๋ฉฐ ๋‚ด๋ถ€์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ’์œผ๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด์•ผํ•˜๋Š” ์ƒํ™ฉ, ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋งค์ดˆ ๋ณ€ํ•˜๋Š” ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๊ฐ’์ด ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค๋ฉด State๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. Props๋Š” ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , State๋Š” ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒํ™ฉ์— ๋”ฐ๋ผ ์•Œ๋งž์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

profile
๋„๋ผ์—๋ชฝ ์•”๊ธฐ๋นต

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