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

web/react

use

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

use

 

๐ŸŽฏ use๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

**use**๋Š” React์—์„œ **Promise(๋น„๋™๊ธฐ ์ž‘์—…)**๋ฅผ ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ๋Šฅ์ด์—์š”.
๋น„๋™๊ธฐ ์ž‘์—…์€ ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜ API ์š”์ฒญ์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ฃ .

 

๐Ÿ• ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ: ํ”ผ์ž ๋ฐฐ๋‹ฌ ์ด์•ผ๊ธฐ

์—ฌ๋Ÿฌ๋ถ„์ด ํ”ผ์ž ๊ฐ€๊ฒŒ์—์„œ ํ”ผ์ž๋ฅผ ์ฃผ๋ฌธํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ด์š”. ๐Ÿ•

  1. ๊ธฐ์กด ๋ฐฉ์‹
    • ํ”ผ์ž๊ฐ€ ์™„์„ฑ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ์ฃผ๋ฐฉ์— ๊ฐ€์„œ "ํ”ผ์ž ๋‹ค ๋๋‚˜์š”?" ํ•˜๊ณ  ๋ฌผ์–ด๋ณด๋Š” ์ƒํ™ฉ์ด์—์š”.
    • ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๊ณ„์† ์ƒํƒœ๋ฅผ ์ฒดํฌํ•˜๊ณ  ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜์ฃ .
  2. use๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด?
    • **use**๋Š” ํ”ผ์ž๊ฐ€ ์™„์„ฑ๋  ๋•Œ๊นŒ์ง€ ์•Œ์•„์„œ ๊ธฐ๋‹ค๋ ค์ค๋‹ˆ๋‹ค.
    • ์ฃผ๋ฐฉ์— ๋ฌผ์–ด๋ณด์ง€ ์•Š์•„๋„ ํ”ผ์ž๊ฐ€ ๋‚˜์˜ค๋ฉด ๋ฐ”๋กœ ๊ฐ€์ ธ๋‹ค ์ค˜์š”.
    • ์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€๋น„๋  ๋•Œ๊นŒ์ง€ ์•Œ์•„์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€๋น„๋˜๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด์—์š”.

 

๐Ÿ› ๏ธ use ์‚ฌ์šฉ๋ฒ•

use๋Š” **๋น„๋™๊ธฐ ์ž‘์—…(Promise)**์„ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•ด ๋ณผ๊นŒ์š”?

 

1. ๊ธฐ์กด ๋ฐฉ์‹: ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

React์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๋ณดํ†ต useEffect์™€ useState๋ฅผ ์‚ฌ์šฉํ–ˆ์–ด์š”.

import React, { useState, useEffect } from 'react';

function App() {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetchData();
  }, []);

  async function fetchData() {
    const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
    const result = await response.json();
    setData(result);
    setLoading(false);
  }

  if (loading) return <p>๋กœ๋”ฉ ์ค‘...</p>;

  return <div>๋ฐ์ดํ„ฐ: {data.title}</div>;
}

export default App;

์„ค๋ช…:

  • useState์™€ useEffect๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ฒดํฌํ•ด์•ผ ํ–ˆ์–ด์š”.
  • ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜๊ณ , ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ท€์ฐฎ์ฃ ?

 

2. use๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ

React 18์—์„œ **use**๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฐ ๋น„๋™๊ธฐ ์ž‘์—…์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค.

import React, { use } from 'react';

const dataPromise = fetch('https://jsonplaceholder.typicode.com/posts/1').then((res) =>
  res.json()
);

function App() {
  const data = use(dataPromise); // use๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด

  return <div>๋ฐ์ดํ„ฐ: {data.title}</div>;
}

export default App;

 

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

  1. dataPromise
    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” Promise๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅํ•ด์š”.
  2. use๋ฅผ ์‚ฌ์šฉ
    • use(dataPromise)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด React๊ฐ€ ์•Œ์•„์„œ Promise๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค.
    • ๋” ์ด์ƒ **useState**๋‚˜ **useEffect**๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์–ด์š”!
  3. ๊ฒฐ๊ณผ
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€๋น„๋˜๋ฉด ๋ฐ”๋กœ ํ™”๋ฉด์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿš€ use๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ 

  1. ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ ธ์š”
    • useEffect์™€ useState๋กœ ๋ณต์žกํ•˜๊ฒŒ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์–ด์š”.
    • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฝ”๋“œ๊ฐ€ ํ•œ ์ค„๋กœ ๊น”๋”ํ•ด์ง‘๋‹ˆ๋‹ค.
  2. ๋กœ๋”ฉ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š” ์—†์–ด์š”
    • React๊ฐ€ Promise๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ์•Œ์•„์„œ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋ผ์š”.
  3. ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋” ์ง๊ด€์ ์œผ๋กœ ์ฒ˜๋ฆฌ
    • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์ด ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

 

โš ๏ธ ์ฃผ์˜ํ•  ์ 

  1. React 18 ์ด์ƒ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • use๋Š” React 18 ๋ฒ„์ „๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.
  2. ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ
    • ํ˜„์žฌ๋Š” React์˜ **์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ(Server Component)**์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์•„์ง ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š์•„์š”.
  3. ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
    • Promise๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ(์˜ˆ: ์„œ๋ฒ„ ์˜ค๋ฅ˜) ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๋”ฐ๋กœ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๐ŸŒŸ ํ•œ ์ค„ ์š”์•ฝ

**use**๋Š” Promise๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์„œ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” React์˜ ์ตœ์‹  ๊ธฐ๋Šฅ์ด์—์š”.

 

๐ŸŽ‰ ๋งˆ๋ฌด๋ฆฌ

React์˜ **use**๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ค๊ณ , ์ฝ”๋“œ๋„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด์š”.
ํ•˜์ง€๋งŒ ์•„์ง ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์•ž์œผ๋กœ React ์ƒํƒœ๊ณ„์—์„œ ๋”์šฑ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด ๋  ๊ฑฐ์˜ˆ์š”. ๐Ÿ˜Š

728x90
๋ฐ˜์‘ํ˜•

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

experimental_taintUniqueValue  (0) 2024.12.16
experimental_taintObjectReference  (0) 2024.12.16
startTransition  (0) 2024.12.16
memo  (0) 2024.12.16
lazy  (0) 2024.12.16
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
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