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

web/react hook

useActionState

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

useActionState

 

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

React์—์„œ๋Š” ์ƒํƒœ(state)๋ผ๋Š” ๊ฐœ๋…์ด ์ค‘์š”ํ•ด์š”.
์ƒํƒœ๋Š” ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด:

  • ์นด์šดํ„ฐ ์•ฑ์—์„œ ์ˆซ์ž๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ๋„ ์ƒํƒœ
  • ๋กœ๊ทธ์ธ ํผ์—์„œ ์ž…๋ ฅํ•˜๋Š” ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋„ ์ƒํƒœ

๊ทธ๋Ÿผ useActionState๋Š” ๋ญ๋ƒ๊ณ ์š”?
**"์–ด๋–ค ํ–‰๋™(action)์— ๋”ฐ๋ผ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์“ฐ๋Š” ๋„๊ตฌ"**๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ์š”.

 

๐Ÿ” ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ ์ด์•ผ๊ธฐ๋กœ ์•Œ์•„๋ณด๊ธฐ

์—ฌ๋Ÿฌ๋ถ„์ด ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ๋ฅผ ์šด์˜ํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณผ๊นŒ์š”? ๐Ÿ”

  • ์†๋‹˜์ด ์™€์„œ ํ–„๋ฒ„๊ฑฐ ์ฃผ๋ฌธ์„ ํ•ฉ๋‹ˆ๋‹ค. (์ด๊ฒŒ ์•ก์…˜!)
  • ์ด๋•Œ ๊ฐ€๊ฒŒ๋Š” ์ฃผ๋ฌธ๋ฐ›์€ ๋ฉ”๋‰ด๋ฅผ ํ™•์ธํ•˜๊ณ , ์ฃผ๋ฌธ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๊ฒ ์ฃ ? (์ด๊ฒŒ ์ƒํƒœ ์—…๋ฐ์ดํŠธ!)

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” ์ฃผ๋ฌธ(์•ก์…˜)์— ๋”ฐ๋ผ ๊ฐ€๊ฒŒ ์ƒํƒœ(์ฃผ๋ฌธ ๋ฆฌ์ŠคํŠธ)๊ฐ€ ๋ณ€ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—์š”.
์ด๊ฑธ React์˜ **useActionState**๋ฅผ ์ด์šฉํ•ด์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

๐Ÿ› ๏ธ ์˜ˆ์‹œ ์ฝ”๋“œ๋กœ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

React ์ฝ”๋“œ๋กœ ์กฐ๊ธˆ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š”:

 

import React, { useActionState } from 'react';

function BurgerShop() {
  // useActionState๋ฅผ ์ด์šฉํ•ด์„œ ์ฃผ๋ฌธ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์š”
  const [orders, addOrder] = useActionState(
    (prevOrders, newOrder) => [...prevOrders, newOrder], // ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋กœ์ง
    [] // ์ดˆ๊ธฐ ์ƒํƒœ๋Š” ๋นˆ ์ฃผ๋ฌธ ๋ฆฌ์ŠคํŠธ
  );

  // ์ฃผ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜
  const handleOrder = (menu) => {
    addOrder(menu); // addOrder๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ƒˆ ์ฃผ๋ฌธ์ด ์ƒํƒœ์— ๋ฐ˜์˜๋ผ์š”!
  };

  return (
    <div>
      <h1>๐Ÿ” ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ</h1>
      <button onClick={() => handleOrder('์น˜์ฆˆ๋ฒ„๊ฑฐ')}>์น˜์ฆˆ๋ฒ„๊ฑฐ ์ฃผ๋ฌธ</button>
      <button onClick={() => handleOrder('๋ถˆ๊ณ ๊ธฐ๋ฒ„๊ฑฐ')}>๋ถˆ๊ณ ๊ธฐ๋ฒ„๊ฑฐ ์ฃผ๋ฌธ</button>
      <button onClick={() => handleOrder('๊ฐ์žํŠ€๊น€')}>๊ฐ์žํŠ€๊น€ ์ฃผ๋ฌธ</button>

      <h2>๐Ÿ“ ์ฃผ๋ฌธ ๋ฆฌ์ŠคํŠธ</h2>
      <ul>
        {orders.map((order, index) => (
          <li key={index}>{order}</li> // ์ฃผ๋ฌธ๋œ ๋ฉ”๋‰ด๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ค˜์š”
        ))}
      </ul>
    </div>
  );
}

export default BurgerShop;

 

๐Ÿ”Ž ์ฝ”๋“œ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š” ๊ฑธ๊นŒ?

  1. useActionState:
    • ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ•จ์ˆ˜์˜ˆ์š”.
      ์—ฌ๊ธฐ์„œ๋Š” ๊ธฐ์กด ์ฃผ๋ฌธ ๋ฆฌ์ŠคํŠธ์— ์ƒˆ ์ฃผ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋กœ์ง์ด์ฃ .
    • ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ์ดˆ๊ธฐ ์ƒํƒœ์˜ˆ์š”. ์ฒ˜์Œ์—๋Š” ์•„๋ฌด ์ฃผ๋ฌธ๋„ ์—†์œผ๋‹ˆ๊นŒ []๋กœ ๋น„์–ด์žˆ์–ด์š”.
  2. addOrder:
    • ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด handleOrder๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , addOrder๋ฅผ ํ†ตํ•ด ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋ผ์š”.
    • ์˜ˆ๋ฅผ ๋“ค์–ด "์น˜์ฆˆ๋ฒ„๊ฑฐ"๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ƒํƒœ๊ฐ€ ['์น˜์ฆˆ๋ฒ„๊ฑฐ']๋กœ ๋ฐ”๋€Œ์ฃ .
  3. ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๊ฒฐ๊ณผ:
    • ์ฃผ๋ฌธ ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ™”๋ฉด์— ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ผ์š”!

 

๐Ÿงฉ ํ•œ๋งˆ๋””๋กœ ์ •๋ฆฌํ•˜์ž๋ฉด!

useActionState๋Š” ์–ด๋–ค ํ–‰๋™(์•ก์…˜)์— ๋”ฐ๋ผ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ์˜ˆ์š”.
ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ์—์„œ **์ฃผ๋ฌธ(์•ก์…˜)**์ด ๋“ค์–ด์˜ค๋ฉด **์ฃผ๋ฌธ ๋ฆฌ์ŠคํŠธ(์ƒํƒœ)**๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ !

728x90
๋ฐ˜์‘ํ˜•

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

useEffect  (1) 2024.12.14
useDeferredValue  (0) 2024.12.14
useDebugValue  (0) 2024.12.14
useContext  (0) 2024.12.14
useCallback  (0) 2024.12.14
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•
250x250