ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

web/react hook

useState

dev_been94 2024. 12. 14. 15:46
728x90
๋ฐ˜์‘ํ˜•

useState

 

๐ŸŽฏ useState๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

useState๋Š” ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์ƒํƒœ(๋ฐ์ดํ„ฐ)๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด์—์š”.
์—ฌ๊ธฐ์„œ **์ƒํƒœ(state)**๋ž€ ๋ฌด์—‡์ด๋ƒ๋ฉด:

  • ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๋Š” ๋ฐ์ดํ„ฐ
  • ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋ฐ”๋€Œ๋Š” ๊ฐ’

๊ฐ„๋‹จํžˆ ๋งํ•ด, ๋ณ€๊ฒฝ๋˜๋ฉด ํ™”๋ฉด์ด ๋‹ค์‹œ ๊ทธ๋ ค์ ธ์•ผ ํ•˜๋Š” ๊ฐ’์„ ์ƒํƒœ๋ผ๊ณ  ํ•ด์š”.
์ด ์ƒํƒœ๋ฅผ React์—์„œ ๊ด€๋ฆฌํ•  ๋•Œ **useState**๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿงฉ ์™œ ์ƒํƒœ๊ฐ€ ํ•„์š”ํ• ๊นŒ์š”?

์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฐ„๋‹จํ•œ ์นด์šดํ„ฐ ์•ฑ์„ ๋งŒ๋“ ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์„ธ์š”:

  • ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ์ˆซ์ž๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ฐ์†Œํ•ด์•ผ ํ•ด์š”.
  • ์ด ์ˆซ์ž๋ฅผ React์—์„œ๋Š” **์ƒํƒœ(state)**๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ™”๋ฉด์— ๋ฐ˜์˜๋  ์ˆ˜ ์žˆ์–ด์š”.

 

๐Ÿ› ๏ธ useState ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

useState๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์š”:

import React, { useState } from "react";

function Counter() {
  // useState๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒํƒœ ๋งŒ๋“ค๊ธฐ
  const [count, setCount] = useState(0); // ์ดˆ๊ธฐ๊ฐ’: 0

  const increment = () => {
    setCount(count + 1); // count๋ฅผ 1 ์ฆ๊ฐ€
  };

  const decrement = () => {
    setCount(count - 1); // count๋ฅผ 1 ๊ฐ์†Œ
  };

  return (
    <div>
      <h1>์นด์šดํ„ฐ: {count}</h1>
      <button onClick={increment}>์ฆ๊ฐ€</button>
      <button onClick={decrement}>๊ฐ์†Œ</button>
    </div>
  );
}

export default Counter;

 

๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

  1. useState ์„ ์–ธ
const [count, setCount] = useState(0);

 

  • count: ์ƒํƒœ์˜ ๊ฐ’์ด์—์š”. ์ฒ˜์Œ ๊ฐ’์€ 0์œผ๋กœ ์„ค์ •ํ–ˆ์–ด์š”.
  • setCount: ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜์˜ˆ์š”. ์ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ™”๋ฉด์ด ๋‹ค์‹œ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค.
  • useState(0): ์ƒํƒœ์˜ ์ดˆ๊ธฐ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ–ˆ์–ด์š”.

2. ์ƒํƒœ ๋ณ€๊ฒฝํ•˜๊ธฐ

  • setCount(count + 1)์€ count ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œ์ผœ์š”.
  • React๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ™”๋ฉด์„ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ๋ Œ๋”๋งํ•ด์„œ ์ตœ์‹  ๊ฐ’์„ ๋ณด์—ฌ์ค˜์š”.

3. ํ™”๋ฉด์— ์ƒํƒœ ๋ณด์—ฌ์ฃผ๊ธฐ

<h1>์นด์šดํ„ฐ: {count}</h1> 
  • ์ƒํƒœ ๊ฐ’์ธ count๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•ด์ค๋‹ˆ๋‹ค.

4. ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ

  • ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด increment๋‚˜ decrement ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋ผ์š”.

 

๐Ÿ  useState๋ฅผ ์ง‘์•ˆ์ผ๋กœ ๋น„์œ ํ•˜๊ธฐ

React์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ๋งˆ์น˜ ์ง‘์•ˆ ์ฒญ์†Œ์™€ ๋น„์Šทํ•ด์š”. ๐Ÿงน

  1. ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๊ณณ๋ฐฉ
    • React ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒํƒœ๋ฅผ ๋ฐฉ์ฒ˜๋Ÿผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์š”.
  2. ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ๋ฐฉ ์ฒญ์†Œ
    • setCount๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์š”.
    • ์ฒญ์†Œ๋ฅผ ํ•˜๋ฉด ๋ฐฉ์ด ๊นจ๋—ํ•ด์ง€๋“ฏ, ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ํ™”๋ฉด๋„ ๋ฐ”๋€Œ์–ด์š”.
  3. React๋Š” ์ž๋™์œผ๋กœ ๋ฐฉ์„ ๋‹ค์‹œ ๋ณด์—ฌ์ค˜์š”.
    • ์ƒํƒœ๊ฐ€ ๋ฐ”๋€” ๋•Œ React๋Š” ํ™”๋ฉด์„ ์ƒˆ๋กญ๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

 

๐Ÿ’ก useState๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ผญ ๊ธฐ์–ตํ•  ์ 

  1. setState ํ•จ์ˆ˜๋กœ๋งŒ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์š”.
    • count = count + 1์ฒ˜๋Ÿผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜๋ฉด ํ™”๋ฉด์ด ๋ฐ”๋€Œ์ง€ ์•Š์•„์š”.
    • ๋ฐ˜๋“œ์‹œ **setCount()**๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์š”!
  2. ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•ด์•ผ ํ•ด์š”.
    • useState(0)์ฒ˜๋Ÿผ ์ƒํƒœ์˜ ์ดˆ๊ธฐ๊ฐ’์„ ์ •ํ•ด์ค˜์•ผ ๋ผ์š”.
  3. ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ํ™”๋ฉด์ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ผ์š”.
    • ์ด๊ฒŒ React์˜ ํฐ ์žฅ์ ์ด์—์š”. ๐Ÿ˜Š

 

๐Ÿงฉ ๋‹ค๋ฅธ ์˜ˆ์ œ: ์ž…๋ ฅ์ฐฝ ์ƒํƒœ ๊ด€๋ฆฌํ•˜๊ธฐ

useState๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅ์ฐฝ์˜ ๋‚ด์šฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”.

import React, { useState } from "react";

function NameInput() {
  const [name, setName] = useState(""); // ์ดˆ๊ธฐ๊ฐ’์€ ๋นˆ ๋ฌธ์ž์—ด

  const handleChange = (e) => {
    setName(e.target.value); // ์ž…๋ ฅ๊ฐ’์„ ์ƒํƒœ๋กœ ์ €์žฅ
  };

  return (
    <div>
      <input
        type="text"
        value={name}
        onChange={handleChange}
        placeholder="์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”"
      />
      <p>๋‹น์‹ ์˜ ์ด๋ฆ„: {name}</p>
    </div>
  );
}

export default NameInput;

๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

  1. useState("")
    • ์ƒํƒœ name์˜ ์ดˆ๊ธฐ๊ฐ’์„ ๋นˆ ๋ฌธ์ž์—ด ""๋กœ ์„ค์ •ํ–ˆ์–ด์š”.
  2. ์ž…๋ ฅ๊ฐ’์„ ์ƒํƒœ๋กœ ์—…๋ฐ์ดํŠธ
    • onChange ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž…๋ ฅ์ฐฝ์˜ ๊ฐ’์„ ์ƒํƒœ์— ์ €์žฅํ•ด์š”.
  3. ํ™”๋ฉด์— ์ƒํƒœ ํ‘œ์‹œํ•˜๊ธฐ
    • ์ž…๋ ฅํ•œ ๊ฐ’์ด ๋ฐ”๋กœ ํ™”๋ฉด์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿš€ ์ •๋ฆฌํ•˜์ž๋ฉด!

useState๋Š” ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๋Š” React์˜ ๊ธฐ๋ณธ ํ›…์ด์—์š”.

  • ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•ด์š”.
  • ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜(setState)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ™”๋ฉด์ด ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์—…๋ฐ์ดํŠธ๋ผ์š”.
728x90
๋ฐ˜์‘ํ˜•

'web > react hook' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

useTransition  (0) 2024.12.14
useSyncExternalStore  (1) 2024.12.14
useRef  (0) 2024.12.14
useReducer  (0) 2024.12.14
useOptimistic  (0) 2024.12.14
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/01   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•
250x250