🐱 #5 React.js - State

박쀀석·2022λ…„ 10μ›” 24일
1

React

λͺ©λ‘ 보기
6/13
post-thumbnail

🧩 state

πŸƒβ€β™‚οΈ What is state in React?

React μ»΄ν¬λ„ŒνŠΈμ˜ ν˜„μž¬ 상황에 λŒ€ν•œ 정보λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ Reactμ—μ„œ μ‚¬μš©ν•˜λŠ” 일반 Javascript 객체이닀. stateλŠ” ν•¨μˆ˜μ— μ„ μ–Έλœ λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ ꡬ성 μš”μ†Œμ—μ„œ κ΄€λ¦¬λ˜μ§€λ§Œ 차이점은 "정상"λ³€μˆ˜λŠ” ν•¨μˆ˜κ°€ μ’…λ£Œλ  λ•Œ "μ‚¬λΌμ§€λŠ”" 반면,stateλŠ” React에 μ˜ν•΄ λ³΄μ‘΄λœλ‹€.

πŸƒβ€β™‚οΈ 그럼 props와 state의 차이점?

props "속성"의 μ€„μž„λ§μ΄λ©° state λ‘˜ λ‹€ 일반 Javascript 객체이닀. λ‘˜λ‹€ λ Œλ”μ˜ 좜λ ₯에 영ν–₯을 λ―ΈμΉ˜λŠ” 정보λ₯Ό λ³΄μœ ν•˜κ³  μžˆμ§€λ§Œ ν•œ 가지 λ°©μ‹μ—μ„œ λ‹€λ₯΄λ‹€. κ΅¬μ„±μš”μ†Œμ— props 전달 λ˜λŠ”(ν•¨μˆ˜ λ§€κ°œλ³€μˆ˜μ™€ μœ μ‚¬) 반면 ꡬ성 μš”μ†Œ λ‚΄ stateμ—μ„œ 관리 λœλ‹€.(ν•¨μˆ˜ λ‚΄μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜μ™€ μœ μ‚¬)

πŸƒβ€β™‚οΈ Stateλ₯Ό const둜 μ„ μ–Έν•˜λŠ” 이유?

const둜 선언을 ν•˜κ²Œλ˜λ©΄ λ³€μˆ˜μ˜ 값을 λ°”κΏ€ 수 μ—†λ‹€λŠ” 사싀을 μ•Œκ²ƒμ΄λ‹€. 근데 μ™œ state 값은 계속 λ°”λ€ŒλŠ”λ° μ™œ let이 μ•„λ‹Œ const둜 μ„ μ–Έν•˜λŠ”κ°€.

stateλŠ” 일반 λ³€μˆ˜μ™€ 달리 setState ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜μ—¬ 값을 λ³€κ²½ν•œλ‹€.(μ΄λ ‡κ²Œ ν•¨μˆ˜ λ‚΄λΆ€μ˜ λ³€μˆ˜κ°€ ν•¨μˆ˜ 수λͺ…이 λλ‚˜λ”λΌλ„, λ³€μˆ˜μ˜ μ°Έμ‘°κ°€ 계속 λœλ‹€λ©΄ κ·Έ λ³€μˆ˜μ˜ 수λͺ…은 계속 λœλ‹€.)

κ·ΈλŸ¬λ‚˜ let을 μ‚¬μš©ν•˜κ²Œ 되면 conuter=100κ³Ό 같은 λ³€μˆ˜ν˜•μ‹μ΄ 할당이 κ°€λŠ₯해진닀.
λ”°λΌμ„œ 이λ₯Ό λ°©μ§€ν•˜κ³  setStateλ₯Ό μ‚¬μš©ν•œ λ³€μˆ˜ λ³€κ²½λ§Œ ν—ˆλ½ν•˜κΈ° μœ„ν•΄ const둜 μ„ μ–Έν•œλ‹€.

πŸƒβ€β™‚οΈ Setstate()

이벀트 ν•Έλ“€λŸ¬, μ„œλ²„ 응닡 λ˜λŠ” μ†Œν’ˆ 변경에 λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•  수 μžˆλ‹€. 이것은 setState() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰λœλ‹€. setState() λ©”μ„œλ“œλŠ” ꡬ성 μš”μ†Œ μƒνƒœμ— λŒ€ν•œ λͺ¨λ“  μ—…λ°μ΄νŠΈλ₯Ό λŒ€κΈ°μ—΄μ— λ„£κ³  React에 μ—…λ°μ΄νŠΈλœ μƒνƒœλ‘œ ꡬ성 μš”μ†Œμ™€ κ·Έ μžμ‹μ„ λ‹€μ‹œ λ Œλ”λ§ ν•˜λ„λ‘ μ§€μ‹œν•œλ‹€.

항상 setState() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μƒνƒœ 객체λ₯Ό λ³€κ²½ν•œλ‹€. ꡬ성 μš”μ†Œκ°€ μ—…λ°μ΄νŠΈ λ˜μ—ˆμŒμ„ μ•Œλ¦¬κ³  render() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

πŸƒβ€β™‚οΈ State μ‚¬μš© 예

function App() {
  const [counter, setCounter] = useState(0); //state
  const increase =()=>{
    setCounter(counter+1);
  };

  return (
    <div>
      <div>{counter}</div>
      <button onClick={increase}>클릭!</button>
    </div>
  );
}
  };

μœ„ μ½”λ“œλŠ” μ‰½κ²Œ μ„€λͺ…ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€. const [적용, λ³€κ²½ν•  λ‚΄μš©]이닀. μœ„ μ½”λ“œ λ‚΄μš©μ„ λ¦¬λ·°ν•˜λ©΄ const [counter, setCounter] = useState(0); μ²˜μŒμ— counter에 state값은 0으둜 μ§€μ •ν•œλ‹€. let counter = 0κ³Ό κ°™λ‹€.

<button onClick={increase}>클릭!</button>을 ν΄λ¦­ν•˜λ©΄ const increase =()=>{ setCounter(counter+1); }; ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜κ³ , <div>{counter}</div> counterκ°€ λ°”λ€ŒλŠ”λ° counterκ°€ λ°”λ€Œλ©΄μ„œ stateλ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ— μžλ™μœΌλ‘œ HTML에 λžœλ”λ§μ΄ 돼 UIκ°€ λ³€κ²½λ˜λŠ” 것이닀.

profile
μ•ˆλ…•ν•˜μ„Έμš” ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžμž…λ‹ˆλ‹€. 글을 이전 μ€‘μž…λ‹ˆλ‹€.

0개의 λŒ“κΈ€