250x250
๋ฐ˜์‘ํ˜•
arkhyeon
arkhyeon
arkhyeon
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (88)
    • Spring (5)
    • Java (4)
    • React (25)
      • TypeScript (6)
      • JavaScript (1)
      • Jest (9)
    • NEXT (8)
    • SQL (1)
    • React native (1)
    • CSS (3)
    • Web (1)
    • Git (3)
    • ETC (6)
    • ๋น…๋ฐ์ดํ„ฐDB (8)
    • Docker (4)
    • Tool (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • react spring websocket
  • react websocket
  • websocket server
  • javasciprt websocket
  • react typescript
  • Spring WebSocket
  • react
  • react usetransition
  • HIVE
  • node WebSocket
  • react jest
  • usetransition
  • WSS
  • docker tomcat
  • websocket
  • jest
  • react loading
  • react19
  • kudu
  • javascript wss

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
arkhyeon

arkhyeon

React

React 19 useTransition vs React 18 pending ์ฒ˜๋ฆฌ : ๋กœ๋”ฉ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ์ฐจ์ด์ 

2024. 12. 31. 11:20
728x90
๋ฐ˜์‘ํ˜•
๐Ÿ’กReact 19์˜ useTransition์€ ๋น„๋™๊ธฐ ์—…๋ฐ์ดํŠธ๋ฅผ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์ž‘์—…์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ UI ๋ฐ˜์‘์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๋กœ๋”ฉ ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๊ฐœ์„ ๋˜๊ณ , ๋” ๋ถ€๋“œ๋Ÿฌ์šด ๋กœ๋”ฉ ์ฒ˜๋ฆฌ์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

React 18์—์„œ์˜ pending ์ฒ˜๋ฆฌ

React 18์—์„œ pending ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ Suspense๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Suspense๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•  ๋•Œ ๋กœ๋”ฉ ์ค‘์ž„์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์—์„œ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๊ฐ์‹ธ๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋กœ๋”ฉ ์ƒํƒœ๊ฐ€ ๊ธธ์–ด์ง€๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Suspense ๋‚ด๋ถ€์—์„œ ๋กœ๋”ฉ ์ค‘์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” UI๋ฅผ ๋งŒ๋“ค ๋•Œ, ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ ๊ฐœ๋ฐœ์ž์˜ ๋ชซ์ž…๋‹ˆ๋‹ค.

const MyComponent = React.lazy(() => import('./MyComponent'));

function App() {
  return (
    <div>
      <Suspense fallback={<div>Loading...</div>}>
        <MyComponent />
      </Suspense>
    </div>
  );
}
function App() {
  // ๋กœ๋”ฉ ์ƒํƒœ์™€ ๋ฐ์ดํ„ฐ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” useState
  const [loading, setLoading] = useState(false);
  const [data, setData] = useState([]);

  const loadData = () => {
    setLoading(true); // ๋กœ๋”ฉ ์‹œ์ž‘
      
     axios.get('find/project')
    .then(res => setData(res.data))
    .finally(() => setLoading(false));
	};
  
  return (
    <div>
      <button onClick={loadData} disabled={loading}>Load Data</button>
      {loading ? (
        <div>Loading...</div> // ๋กœ๋”ฉ ์ค‘์ผ ๋•Œ ํ‘œ์‹œ
      ) : (
        <div>Data: {data.join(', ')}</div> // ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ๋”ฉ๋˜๋ฉด ํ‘œ์‹œ
      )}
    </div>
  );
}

React 19์—์„œ useTransition ์‚ฌ์šฉ

React 19์—์„œ ๋„์ž…๋œ useTransition์€ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋”์šฑ ์ง๊ด€์ ์ด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. useTransition์€ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ "์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€" ์ž‘์—…์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ, ์ค‘์š”ํ•œ ์ž‘์—…์€ ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ๊ธด ๋กœ๋”ฉ ์ž‘์—…์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋น„๋™๊ธฐ ์ž‘์—… ์ค‘ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๋” ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

useTransition์€ ๋‘ ๊ฐ€์ง€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค: isPending (์ž‘์—…์ด ๋Œ€๊ธฐ ์ค‘์ธ์ง€ ์—ฌ๋ถ€)๊ณผ startTransition (๋น„๋™๊ธฐ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜). ์ด๋ฅผ ํ†ตํ•ด UI๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋„๋ก ์ฆ‰๊ฐ์ ์ธ ๋ฐ˜์‘์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function App() {
  const [isPending, startTransition] = useTransition();
  const [data, setData] = useState([]);

  const fetchData = () => {
    startTransition(() => {
      // ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ
      setTimeout(() => {
        setData([1, 2, 3, 4, 5]);
      }, 2000);
    });
  };

  return (
    <div>
      <button onClick={fetchData}>Load Data</button>
      {isPending ? <div>Loading...</div> : <div>Data: {data.join(', ')}</div>}
    </div>
  );
}

๊ฒฐ๋ก 

React 19์—์„œ ๋„์ž…๋œ useTransition์€ ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ์—์„œ ํฐ ๊ฐœ์„ ์„ ์ด๋ฃจ์—ˆ์œผ๋ฉฐ, ๋กœ๋”ฉ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Suspense์™€ useState๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์€ ์—ฌ์ „ํžˆ ์œ ์šฉํ•˜์ง€๋งŒ, React 19์˜ useTransition์€ ๋” ๋‚˜์€ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

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

React 19 useTransition์„ ํ™œ์šฉํ•œ Axios ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ๊ณผ ์ƒํƒœ ์—…๋ฐ์ดํŠธ  (0) 2025.01.10
React 19์˜ useTransition์„ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ์ƒํƒœ ์—…๋ฐ์ดํŠธ์™€ UI ๋ฐ˜์‘์„ฑ ํ–ฅ์ƒ  (0) 2025.01.09
[React19] React 19 ref์™€ React 18 forwardRef ๋น„๊ต  (0) 2024.12.31
Unrecognized extension value in extension set ([object Object]).  (0) 2024.06.18
React Labs React 19 - Memoization, useFormState  (0) 2024.03.21
    'React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • React 19 useTransition์„ ํ™œ์šฉํ•œ Axios ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ๊ณผ ์ƒํƒœ ์—…๋ฐ์ดํŠธ
    • React 19์˜ useTransition์„ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ์ƒํƒœ ์—…๋ฐ์ดํŠธ์™€ UI ๋ฐ˜์‘์„ฑ ํ–ฅ์ƒ
    • [React19] React 19 ref์™€ React 18 forwardRef ๋น„๊ต
    • Unrecognized extension value in extension set ([object Object]).
    arkhyeon
    arkhyeon

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”