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

web/react hook

useDeferredValue

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

useDeferredValue

 

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

useDeferredValue๋Š” ๊ฐ’์„ ์กฐ๊ธˆ ๋Šฆ๊ฒŒ ์—…๋ฐ์ดํŠธํ•ด์„œ ํ™”๋ฉด ๋ Œ๋”๋ง ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋„๊ตฌ์˜ˆ์š”.

์™œ ํ•„์š”ํ• ๊นŒ์š”?
React์—์„œ๋Š” ์ž…๋ ฅ์ด ๋น ๋ฅด๊ฒŒ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ํ™”๋ฉด์„ ๋ฐ”๋กœ๋ฐ”๋กœ ๋ Œ๋”๋งํ•˜๋Š”๋ฐ,
๋„ˆ๋ฌด ๋งŽ์€ ์ž‘์—…์ด ๋™์‹œ์— ์ผ์–ด๋‚˜๋ฉด ํ™”๋ฉด์ด ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”.
์ด๋•Œ useDeferredValue๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚˜๋ˆ ์„œ ๋ Œ๋”๋ง์„ ํšจ์œจ์ ์œผ๋กœ ํ•ด์ค˜์š”.

 

๐Ÿข ๊ฑฐ๋ถ์ด์™€ ํ† ๋ผ ์ด์•ผ๊ธฐ๋กœ ์ดํ•ดํ•ด๋ณด๊ธฐ

๊ฑฐ๋ถ์ด์™€ ํ† ๋ผ๊ฐ€ ์‚ฐ์ฑ…์„ ํ•˜๊ณ  ์žˆ์–ด์š”. ๐Ÿข๐Ÿ‡

  • ํ† ๋ผ๋Š” ๋น ๋ฅด๊ฒŒ ๋›ฐ์–ด๊ฐ€๊ณ ,
  • ๊ฑฐ๋ถ์ด๋Š” ์ฒœ์ฒœํžˆ ๋”ฐ๋ผ์˜ต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ **"ํ† ๋ผ"**๋Š” ์ž…๋ ฅ๊ฐ’์ด๊ณ , **"๊ฑฐ๋ถ์ด"**๋Š” useDeferredValue๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฐ’์ด์—์š”.

 

๐Ÿƒ ์‹ค์ƒํ™œ ์˜ˆ์‹œ: ๊ฒ€์ƒ‰์ฐฝ

์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ๋ถ„์ด ์‡ผํ•‘๋ชฐ์—์„œ ๋ฌผ๊ฑด์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค๊ณ  ํ•ด๋ณผ๊ฒŒ์š”. ๐Ÿ”

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

๐Ÿ› ๏ธ useDeferredValue ์ฝ”๋“œ ์˜ˆ์‹œ

๊ฐ„๋‹จํ•œ ๊ฒ€์ƒ‰์ฐฝ ์˜ˆ์ œ๋ฅผ ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š”:

import React, { useState, useDeferredValue } from "react";

function SearchApp() {
  const [searchInput, setSearchInput] = useState(""); // ์ž…๋ ฅ๊ฐ’ ์ƒํƒœ
  const deferredSearch = useDeferredValue(searchInput); // ์ž…๋ ฅ๊ฐ’์„ ์กฐ๊ธˆ ๋Šฆ๊ฒŒ ๋”ฐ๋ผ์˜ค๋Š” ๊ฐ’

  const handleInputChange = (e) => {
    setSearchInput(e.target.value); // ์ž…๋ ฅ๊ฐ’ ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ
  };

  return (
    <div>
      <h1>๐Ÿ” ๊ฒ€์ƒ‰์ฐฝ</h1>
      <input
        type="text"
        placeholder="๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”"
        onChange={handleInputChange}
      />
      <SearchResults query={deferredSearch} />
    </div>
  );
}

function SearchResults({ query }) {
  // ์—ฌ๊ธฐ์„œ๋Š” deferredSearch ๊ฐ’์— ๋”ฐ๋ผ ๋ Œ๋”๋ง์ด ์กฐ๊ธˆ ๋Šฆ๊ฒŒ ์ด๋ฃจ์–ด์ ธ์š”
  return (
    <div>
      <h3>๐Ÿ“‹ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ:</h3>
      <p>์ž…๋ ฅ๋œ ๊ฒ€์ƒ‰์–ด: {query}</p>
    </div>
  );
}

export default SearchApp;

 

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

  1. searchInput
    • setSearchInput์œผ๋กœ ์ž…๋ ฅ๊ฐ’์ด ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.
  2. useDeferredValue
    • useDeferredValue(searchInput)์€ ์ž…๋ ฅ๊ฐ’์„ ์กฐ๊ธˆ ๋Šฆ๊ฒŒ ๋”ฐ๋ผ์˜ต๋‹ˆ๋‹ค.
    • ๊ทธ๋ž˜์„œ ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜๋Š” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” ์ž…๋ ฅ๊ฐ’๊ณผ ์‚ด์ง ๋Šฆ๊ฒŒ ๋ฐ˜์‘ํ•ด์š”.
  3. ๊ฒฐ๊ณผ
    • ์ž…๋ ฅ์ฐฝ์€ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•˜์ง€๋งŒ,
    • ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๋Š” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” ์„ฑ๋Šฅ์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š๊ฒŒ ์ฒœ์ฒœํžˆ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿš€ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

useDeferredValue๋Š” ํŠนํžˆ ๋ณต์žกํ•œ ํ™”๋ฉด์—์„œ ์œ ์šฉํ•ด์š”.

  • ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰
  • ๋ฐ์ดํ„ฐ ๋ชฉ๋ก ๋ Œ๋”๋ง
  • ์ž…๋ ฅ๊ฐ’์— ๋”ฐ๋ผ ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋™์‹œ์— ์—…๋ฐ์ดํŠธ๋  ๋•Œ

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ํ™”๋ฉด์ด ๋Š๋ ค์ง€๋Š” ๊ฑธ ๋ฐฉ์ง€ํ•ด ์ฃผ๋‹ˆ๊นŒ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋” ์ข‹์•„์ ธ์š”!

 

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

useDeferredValue๋Š” ๊ฐ’์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์‚ด์ง ์ง€์—ฐ์‹œ์ผœ์„œ ํ™”๋ฉด ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์ฃผ๋Š” ๋„๊ตฌ์˜ˆ์š”.

728x90
๋ฐ˜์‘ํ˜•

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

useId  (0) 2024.12.14
useEffect  (1) 2024.12.14
useDebugValue  (0) 2024.12.14
useContext  (0) 2024.12.14
useCallback  (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