useState()

1. κ°œμš”

λ¦¬μ•‘νŠΈμ—μ„œ κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” 훅을 ν•˜λ‚˜ λ§ν•˜μžλ©΄ useState()κ°€ 될 것이닀. useState()λŠ” μ΄λ¦„μ—μ„œ μ•Œ 수 μžˆλ“―μ΄ stateλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ 훅이닀. 즉, useState()λ₯Ό 톡해 λ™μ μœΌλ‘œ λ³€ν•˜λŠ” 데이터λ₯Ό 관리할 수 μžˆλ‹€.


2. useState()λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€?!

import React, { useState } from "react";

const Counter = () => {
  let number = 1;

  const onIncrease = () => {
    number += 1;
    console.log("증가 / number:", number);
  };

  const onDecrease = () => {
    number -= 1;
    console.log("κ°μ†Œ / number:", number);
  };

  return (
    <div>
      <h1>카운트: {number}</h1>
      <button onClick={onIncrease}>+</button>
      <button onClick={onDecrease}>-</button>
    </div>
  );
};

export default Counter;
no useState

μœ„μ˜ μ»΄ν¬λ„ŒνŠΈλŠ” λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ 카운트λ₯Ό ν•˜λ‚˜μ”© μ¦κ°€μ‹œν‚€κ±°λ‚˜ κ°μ†Œμ‹œν‚€κ³  ν˜„μž¬μ˜ 카운트λ₯Ό λ³΄μ—¬μ£ΌλŠ” λ‹¨μˆœν•œ μ»΄ν¬λ„ŒνŠΈμ΄λ‹€.

ν•˜μ§€λ§Œ λ²„νŠΌμ„ 눌러 카운트λ₯Ό 증가, κ°μ†Œλ₯Ό μ‹œν‚€λ©΄ 카운트의 값이 λ°”λ€Œμ§€ μ•ŠλŠ” 것을 λ³Ό 수 μžˆλ‹€. κ·Έλ ‡λ‹€λ©΄ λ³€μˆ˜ number값이 λ³€ν•˜μ§€ μ•Šμ•„μ„œ 일까? λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜μ— μ½˜μ†”λ‘œ number값을 찍어보면 μ•„λž˜μ™€ 같이 계속 λ³€ν•˜λŠ” 것을 μ•Œ 수 μžˆλ‹€.

no useState Console

number값이 κ³„μ†ν•΄μ„œ λ³€ν•˜μ§€λ§Œ 화면에 λ³€ν™˜ number값이 λ‚˜νƒ€λ‚˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¦¬μ•‘νŠΈκ°€ μž¬λžœλ”λ§μ„ ν•˜μ§€ μ•Šμ•„μ„œ 이닀.

number의 값이 λ™μ μœΌλ‘œ κ³„μ†ν•΄μ„œ λ³€ν•˜κΈ° λ•Œλ¬Έμ— μš°λ¦¬λŠ” useState()λ₯Ό μ‚¬μš©ν•΄μ„œ ν…Œμ΄ν„°λ₯Ό 관리해야 ν•œλ‹€.


3. useState() μ‚¬μš©ν•˜κΈ°

useState() μ•„λž˜μ™€ 같이 μ‚¬μš©ν•œλ‹€.

const [λ³€μˆ˜λͺ…, setν•¨μˆ˜λͺ…] = useState(μ΄ˆκΉƒκ°’); 보톡 setν•¨μˆ˜ν˜μ€ λ³€μˆ˜λͺ… μ•žμ— setλ₯Ό 뢙인닀. 예λ₯Όλ“€μ–΄ λ³€μˆ˜λ₯Ό name이라고 μ§€μ—ˆμœΌλ©΄ setν•¨μˆ˜λͺ…은 setName으둜 μ§–λŠ”λ‹€. μ΄ˆκΉƒκ°’μ€ μ–΄λ–€ νƒ€μž…μœΌλ‘œ 정해도 되고 μƒλž΅μ„ 해도 λœλ‹€. μƒλž΅μ„ ν–ˆμ„ λ•ŒλŠ” undefinedκ°€ λœλ‹€.

useState() λ₯Ό μ‚¬μš©ν•˜μ—¬ μœ„μ˜ Counter μ»΄ν¬λ„ŒνŠΈμ˜ number값을 κ΄€λ¦¬ν•΄λ³΄μž.

μœ„μ™€ 같이 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λ©΄ +, - λ²„νŠΌμ„ λˆ„λ₯Ό λ•Œ λ§ˆλ‹€ number값이 λ°”λ€Œκ²Œ λœλ‹€.

useState

μ½˜μ†”μ°½λ„ ν•¨κ»˜ 보며 λΉ„κ΅ν•΄λ³΄μž.

useState with Console

ν™”λ©΄μ—λŠ” number값이 4라고 λ‚˜μ˜€μ§€λ§Œ μ½˜μ†”μ—λŠ” 증가 / number: 3이 μ°νžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€. μ΄λŠ” inCrease()ν•¨μˆ˜ λ‚΄μ—μ„œ μ½˜μ†”μ΄ 찍힌 ν›„ number값이 λ°”λ€Œκ³  λ‚˜μ„œ μž¬λ Œλ”λ§μ΄ 되기 λ•Œλ¬Έμ΄λ‹€. 즉, μ•„λž˜μ™€ 같은 과정을 κ±°μΉœλ‹€κ³  λ³Ό 수 μžˆλ‹€.

  1. setNumber((prev) => prev + 1); ν•¨μˆ˜ μ‹€ν–‰ (비동기)

  2. console.log("증가 / number:", number); ν•¨μˆ˜ μ‹€ν–‰

  3. number값이 λ°”λ€Œλ©° νŽ˜μ΄μ§€κ°€ μž¬λ Œλ”λ§

  4. <h1>카운트: {number}</h1>에 λ³€ν•œλœ number값이 μ μš©λœλ‹€.

κ·Έλ ‡λ‹€λ©΄! inCrease()ν•¨μˆ˜λ‚΄μ˜ consolo.log에 λ³€κ²½λœ number값이 찍히게 ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ–΄λ–»κ²Œ ν• κΉŒ? 즉, μž¬λ Œλ”λ§μ΄ λ˜λ©΄μ„œ λ™μ‹œμ— λ³€ν™”λœ stateκ°’(μ—¬κΈ°μ„œλŠ” number)을 λ‹€λ₯Έ ν•¨μˆ˜λ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„  λ‹€μŒ μ±•ν„°μ—μ„œ 배울 useEffect()λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ useEffect()μ±•ν„°μ—μ„œ 닀룬닀.


4. setState()

setState()λŠ” λ¦¬μ•‘νŠΈ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈ λ‚΄μ„œ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” hooks인 useState()λ₯Ό 톡해 λ°˜ν™˜λ˜λŠ” ν•¨μˆ˜μ΄λ‹€. setState()λŠ” μ•„λž˜μ™€ 같은 νŠΉμ§•μ΄ μžˆλ‹€.

  1. 기본적으둜 λΉ„λ™κΈ°μ μœΌλ‘œ λ™μž‘ν•œλ‹€.

  2. state 객체λ₯Ό λ„˜κ±°μ€„ 수 μžˆμ„ 뿐만 μ•„λ‹ˆλΌ μƒˆλ‘œμš΄ stateλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ₯Ό 인자둜 λ„˜κ²¨μ€„ 수 μžˆλ‹€.

setState()의 μ „λ‹¬μΈμžμ— λŒ€ν•΄ μžμ„Ένžˆ μ‚΄νŽ΄λ³΄μž

μ•„λž˜λŠ” setState()의 νƒ€μž…μ„ λ‚˜νƒ€λ‚Έ μ½”λ“œμ΄λ‹€.

μœ„μ˜ λ‚΄μš©μ„ μ •λ¦¬ν•˜μžλ©΄ setState()의 μ „λ‹¬μΈμžλŠ” 두 μ’…λ₯˜κ°€ λ“€μ–΄κ°ˆ 수 μžˆλ‹€.

  1. S: stateκ°€ μ–΄λ–»κ²Œ λ³€κ²½λ˜μ–΄μ Έμ•Ό ν•œλ‹€λΌλŠ” κ·Έ 값을 넣을 수 μžˆλ‹€.

  2. ((prevState: S) => S): μ΄μ „μ˜ stateλ₯Ό 인자둜 λ°›κ³  μƒˆλ‘œμš΄ stateλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜(μ½œλ°±ν•¨μˆ˜)λ₯Ό 넣을 수 μžˆλ‹€.

3. useState μ‚¬μš©ν•˜κΈ°μ—μ„œλŠ” 두 번째 λ°©λ²•μœΌλ‘œ 인자λ₯Ό λ„£μ—ˆλ‹€.


5. Conclusion

useState()λŠ” λ‹€μŒμ— 배울 useEffect()와 ν•¨κ»˜ λ¦¬μ•‘νŠΈμ—μ„œ 자주 μ‚¬μš©ν•˜κ³  μžˆλŠ” 훅이닀. 기본적인 μ‚¬μš©λ°©λ²•μ€ 이미 μ•Œκ³  μžˆλŠ” λ‚΄μš©μ΄λΌ κ³΅λΆ€ν•˜κ³  μ΄ν•΄ν•˜λŠ” λ°μ—λŠ” 큰 어렀움을 λŠλΌμ§„ μ•Šμ•˜λ‹€. ν•˜μ§€λ§Œ setState()ν•¨μˆ˜κ°€ λΉ„λ™κΈ°λΌλŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€. κ·Έ μ „μ—λŠ” κ·Έλƒ₯ state값을 λ°”κΎΈκΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜λΌλŠ” μ •λ„λ§Œ μ•Œκ³  μžˆμ—ˆλ‹€. ν•΄λ‹Ή λ‚΄μš©μ— λŒ€ν•œ ν•™μŠ΅μ΄ 있기 μ „μ—λŠ” "μ™œ setState()λ₯Ό μ‚¬μš©ν•΄μ„œ state값을 λ°”κΎΈμ—ˆλŠ”λ° λ°”λ‘œ 적용이 λ˜μ§€ μ•Šμ„κΉŒ?"λΌλŠ” ꢁ금증이 μžˆμ—ˆλŠ”λ° ꢁ금증이 ν•΄κ²°λ˜μ–΄μ„œ 속이 λ»₯ 뚫린 기뢄이닀.πŸ˜ƒ


μ°Έκ³ 

λ„μ„œ - μ†Œν”Œμ˜ 처음 λ§Œλ‚œ λ¦¬μ•‘νŠΈ 7. useState λ₯Ό 톡해 μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ°”λ€ŒλŠ” κ°’ κ΄€λ¦¬ν•˜κΈ° React의 setState() μ œλŒ€λ‘œ μ‚¬μš©ν•˜κΈ°


πŸ‘†

πŸ“… 2022-07-26

Last updated