• React/React Hook

[React] useState ์‚ฌ์šฉ๋ฒ• ๋ฐ ์˜ˆ์ œ - React Hook

Suro_1123 2023. 3. 30. 10:12

React Hook - useState

 

 

 

 

๐Ÿ’ฌ State๋ž€?

  • ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋Š” ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ์‚ฌ์šฉ์ž UI์™€ ๋ฐ€์ ‘ํ•˜๊ณ  ๋ณ€๊ฒฝ์ด ์žฆ๋‹ค๋ฉด ๋ณ€์ˆ˜(let, const) ๋ง๊ณ  useState ์‚ฌ์šฉ

๐Ÿ˜Ž useState ์‚ฌ์šฉํ•˜๊ธฐ

 

App.js

 

1. ์šฐ์„  useState๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด import๋ฅผ ์‹œ์ผœ์ค˜์•ผํ•œ๋‹ค.

import { useState } from 'react';

 

2. ๊ธฐ๋ณธ์ ์ธ useState ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

const [๋ณ€์ˆ˜๋ช…, set๋ณ€์ˆ˜๋ช…] = useState(์ดˆ๊ธฐ๊ฐ’);

์ฒซ๋ฒˆ์งธ๋Š” ๋ณ€์ˆ˜๋ช…, ๋‘๋ฒˆ์งธ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ฌ ํ•จ์ˆ˜๋‹ค

์ฝ”๋“œ๋งŒ ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋‹ˆ ์˜ˆ์‹œ๋ฅผ ๋ณด๋„๋ก ํ•˜์ž.

 


๐Ÿ”ฅ useState ์˜ˆ์‹œ1

 

์ฒซ ๋ฒˆ์งธ ์˜ˆ์‹œ๋Š” ๋ฒ„ํŠผ ํด๋ฆญ์‹œ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ Counter ์˜ˆ์‹œ์ด๋‹ค.

 

App.js

import { useState } from 'react';

function App() {
  const [counter, setCounter] = useState(0);
  console.log(`ํ˜„์žฌ State ๊ฐ’ : ${counter}`)

  const upgradeCounter = () => {
    setCounter(counter + 1)
  }
  return (
    <div>
        <span>Number : {counter}</span>
        <div>
          <button onClick={upgradeCounter}>UPGRADE</button>
        </div>
    </div>
  );
}

export default App;

 

์‹คํ–‰ํ™”๋ฉด โœจ

 

 

 

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

 

1. useState import

 

 

2. useState ์ดˆ๊ธฐ๊ฐ’ ๋งŒ๋“ค๊ธฐ

 

counter์ด๋ผ๋Š” state์˜ ์ดˆ๊ธฐ๊ฐ’ 0

 

3. button์— onClick ์†์„ฑ์„ ์ฃผ๊ณ  upgradeCounter ํ•จ์ˆ˜ ํ˜ธ์ถœ

 

 

4. setCounter(state ๋ณ€๊ฒฝ ํ•จ์ˆ˜)๋กœ counter + 1 ์ฆ๊ฐ€

 


์ฃผ์˜โ—โ—

๋งŒ์•ฝ useState๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ๋ณ€์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

setCounter๋กœ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ counter + 1 ํ•˜๋ฉด ์žฌ๋žœ๋”๋ง์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

์ฆ‰ UI๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š์Œ

 

์˜ˆ์‹œ์ฝ”๋“œ

function App() {
  let counter = 0; // useState๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜ ์„ ์–ธ
  const handleCounter = () => {
    console.log(counter)
    return counter = counter + 1; // counter 1์”ฉ ์ฆ๊ฐ€
  }
  return (
    <div>
        <span>Number : {counter}</span>
        <div>
          <button onClick={handleCounter}>UPGRADE</button>
        </div>
    </div>
  );
}

export default App;

 

์‹คํ–‰ํ™”๋ฉด

์ž˜๋ชป๋œ ์˜ˆ์‹œ

 

counter๋ผ๋Š” ๋ณ€์ˆ˜๋Š” ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์ง€๋งŒ, UI๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

Why โ“

setState ํ•จ์ˆ˜๋Š” state๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ React์—๊ฒŒ "ํ™”๋ฉด์„ ๋‹ค์‹œ ๋ Œ๋”๋ง ํ•ด๋ผ"๋ผ๋Š” ๋ช…๋ น์„ ๋‚ด๋ฆฐ๋‹ค.

ํ•œ๋งˆ๋””๋กœ UI์™€ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” State๋กœ ๊ด€๋ฆฌํ•˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

(์ž˜๋ชป๋œ ์˜ˆ์‹œ์—๋Š” ์žฌ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•„ UI ์ƒ์— ๋ณ€๊ฒฝ์ด ์—†๋‹ค)


๐Ÿ”ฅ useState ์˜ˆ์‹œ2

 

๋‘ ๋ฒˆ์งธ useState ์˜ˆ์‹œ๋Š” ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์„ ์ž…๋ ฅ๋ฐ›์•„ li์— ์ถ”๊ฐ€ํ•˜๋Š”๊ฒƒ์ด๋‹ค.

 

App.js

 

import { useState } from 'react';

function App() {
  const [names, setNames] = useState([]);
  const [input, setInput] = useState('');

  const handleInputChange = (e) => {
    setInput(e.target.value);
  };
  const handleUpload = () => {
    console.log(`์ด์ „ names state : ${names}`)
    setNames((prev) => [...prev, input]);
  };

  return (
    <div>
        <input type="text" value={input} 
        onChange={handleInputChange}/>
        <button onClick={handleUpload}>Upload</button>

        <ul>
          {names.map((name, idx) => {
            return (
              <li key={idx}>{name}</li>
            );
          })}
        </ul>
    </div>
  );
}

export default App;

 

์‹คํ–‰ํ™”๋ฉด โœจ

 

 

 

 

 

'โ€ข React > React Hook' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] useEffect ์‚ฌ์šฉ๋ฒ• ๋ฐ ์˜ˆ์ œ - React Hook  (0) 2023.04.02