0813 TIL State & Props

๋ƒํ•˜ํ˜ธํ›„ยท2021๋…„ 8์›” 13์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
27/101

๐Ÿ™†โ€โ™€๏ธ state, props์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•˜๊ณ , ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ™†โ€โ™€๏ธ React ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ(React Function Component)์—์„œ state hook์„ ์ด์šฉํ•˜์—ฌ state๋ฅผ ์ •์˜ ๋ฐ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ™†โ€โ™€๏ธ React ์ปดํฌ๋„ŒํŠธ(React Component)์— props๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ™†โ€โ™€๏ธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  React์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ™†โ€โ™€๏ธ ์‹ค์ œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด๊ณ  ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ state์ด๊ณ  props์— ์ ํ•ฉํ•œ์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ™†โ€โ™€๏ธ ์‹ค์ œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์‹œ ์ ํ•ฉํ•œ state์™€ props์˜ ์œ„์น˜๋ฅผ ์Šค์Šค๋กœ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ™†โ€โ™€๏ธ React์˜ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„(One-way data flow)์— ๋Œ€ํ•ด ์ž์‹ ์˜ ์–ธ์–ด๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฆฌ์•กํŠธ์˜ ์ „๋‹ฌ ์ฃผ์ฒด๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด top-down์ธ ํ•˜ํ–ฅ์‹์ด๋‹ค.

usestate๋Š” ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น์„ ํ™œ์šฉํ•˜๊ณ ์žˆ์—ˆ๋‹ค.

input tag๋Š” ๊ธ€์”จ๊ฐ€ textContent๊ฐ€ ์•„๋‹ˆ๋ผ value๋‹ค.

๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น

๋ฐฐ์—ด ๋ถ„ํ•ดํ•˜๊ธฐ

let arr = ["Bora","Lee"]
let [firstName,surname] = arr
console.log(firstName) // "Bora"
console.log(surname) // "Lee"

๊ฐ์ฒด ๋ถ„ํ•ดํ•˜๊ธฐ

let options = {
title : "Menu",
width : 100,
height : 200
}

let{title,width,height} = options

console.log(title) // "Menu"
console.log(width) // 100
console.log(height) // 200

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

  1. HTML ์†์„ฑ์œผ๋กœ ์ •์˜
<input type = "button" onclick ="alert('๋ฒ„ํŠผ ํด๋ฆญ๋จ!')" ></input>

onclick ์†์„ฑ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. onXXX ๋ฅผ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์†์„ฑ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—์„œ ์ •์˜
  <script>
  document.getElementById('b1').onclick = function() {alert("๋ฒ„ํŠผ ํด๋ฆญ๋จ!!")}
</script>

<body>
  <input type="button" id="b1">
</body>

document.getElementById() ๋ฉ”์„œ๋“œ๋Š” HTML๋ฌธ์„œ์—์„œ ์ง€์ •ํ•œ id ์†์„ฑ์„ ์ฐพ์•„ ๋ฐ”์ธ๋”ฉ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ํ• ๋‹น๋œ ํ•จ์ˆ˜๋ถ€๊ฐ€ ํ˜ธ์ถœ ๋˜์–ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์จ๋ณธ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ

์œ ํšจ์„ฑ๊ฒ€์‚ฌ sprint๋•Œ ์ž‘์„ฑํ•œ ์ด๋ฒคํŠธํ•จ์ˆ˜๋‹ค.

elInputPasswordRetype.onkeyup = function() {
  passwordFlag = isMatch(elInputPassword.value,elInputPasswordRetype.value)
  if(passwordFlag){
    //์ผ์น˜ํ•œ๋‹ค๋ฉด
   elMismatchMessage.classList.add('hide')
   elInputPasswordRetype.classList.remove('underline')
  }
  else{
    //์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด
    elMismatchMessage.classList.remove('hide')
    elInputPasswordRetype.classList.add('underline')
  }
}

onkeyup = ํ•จ์ˆ˜์ž์ฒด๋ฅผ ๋„ฃ์–ด์คฌ๋‹ค. ๋งŒ์•ฝ ํ•จ์ˆ˜๋ฅผ ํ‘œํ˜„์‹์œผ๋กœ ์ผ๋”๋ผ๋ฉด
onkeyup = ํ•จ์ˆ˜์ด๋ฆ„ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ์„ ๊ฒƒ์ด๋‹ค.
ํ‘œํ˜„์‹์„์“ฐ๋“  ๋‘๋ฒˆ์งธ์ฒ˜๋Ÿผ ์„ ์–ธ๋ฌธ์œผ๋กœ ์“ฐ๋“  ์–ด์จ‹๋“  ํ•จ์ˆ˜()๊ฐ€ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ ๊ทธ ์ž์ฒด๋ฅผ ๋„ฃ์–ด์ค€๊ฒƒ์ด๋‹ค.

๊ทผ๋ฐ html์—์„œ๋Š”
<button>Event</button>
์ด๋ ‡๊ฒŒ ์ผ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ž‘์„ฑ๋˜์–ด์žˆ๋‹ค.

๋ฌผ๋ก  ์œ ํšจ์„ฑ๊ฒ€์‚ฌ sprint์˜ ์ฝ”๋“œ๋Š” jsํŒŒ์ผ์— ์ž‘์„ฑํ•œ๊ฑฐ๋‹ค. queryselector๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ด๋ฒคํŠธ๋ฅผ jsํŒŒ์ผ์— ๋งŒ๋“ ๊ฑฐ๋‹ค.
htmlํŒŒ์ผ์—์„œ onclick์„ ์ฃผ๋ ค๋ฉด jsํŒŒ์ผ์˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์•ผํ•ด์„œ ()๋ฅผ ๋ถ™์ธ ๊ฒƒ์ด๋‹ค.

๊ทธ ์™ธ

const [name,setName] = useState("") useState์˜† ์ดˆ๊ธฐ๊ฐ’์„ 2๊ฐœ๋กœ ์„ค์ •ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์•ˆ๋‚˜๊ณ  undefined๊ฐ€ ๋‚˜์˜จ๋‹ค๊ณ ํ•œ๋‹ค ใ…‚ใ„ทใ…‚ใ„ท

useState๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ์“ฐ๊ธฐ ๊ท€์ฐฎ๋‹ค๋ฉด ์ดˆ๊ธฐ๊ฐ’์ž๋ฆฌ์— ๊ฐ์ฒด๋กœ ์—ฌ๋Ÿฌ ์†์„ฑ๋“ค์„ ์ ์„ ์ˆ˜ ์žˆ๋‹ค. useState์— ์ต์ˆ™ํ•ด์ง€๋ฉด ๊ทธ ๋•Œ ์‚ฌ์šฉํ•ด๋ณด์ž.

๋ถ€๋ชจ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ณ€์ˆ˜์— ๋„ฃ์€๊ฑด ๋‹ค ์ž์‹์ปดํฌ๋„ŒํŠธ์— props๋กœ ์ „๋‹ฌํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

state๋‚˜ props๋ฅผ ์ง์ ‘ ๊ณ„์‚ฐํ• ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ state๊ฐ€ ์•„๋‹ˆ๋‹ค.
-> ๋งŒ์•ฝ state์™€ props๋ฅผ ํ†ตํ•ด์„œ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ตณ์ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ƒํƒœ(state)๋กœ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

map ๋ฉ”์†Œ๋“œ๋งŒ ์•Œ์•˜๋Š”๋ฐ Map์ด๋ผ๋Š”๊ฒƒ์ด key์™€ value๋ฅผ ๋งŒ๋“ค๊ฒŒํ•œ๋‹ค๋Š”๊ฒƒ์„ ์•Œ์•˜๋‹ค. ์‹ ๊ธฐํ•˜๋‹ค ใ…Žใ…Ž

profile
DONE is better than PERFECT

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด