๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/React-Query

[ReactQuery] (4) ReactQuery - useIsFetching (feat. Nextjs)

by Rising Oneโ˜… 2025. 3. 19.
728x90
๋ฐ˜์‘ํ˜•
SMALL

Tanstack (ReactQuery) ๋Œ€ํ‘œ์ด๋ฏธ์ง€

 

 

์ ‘๊ทผ (์š”์•ฝ)

์•ฑ์—์„œ isLoading ๊ณผ isFetching๋งŒ์„ ์‚ฌ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ๋งˆ๋‹ค ๊ฐœ๋ณ„ Loading Indicator๋งŒ์„ ํ™œ์šฉํ–ˆ๋‹ค๋ฉด,

useIsFetching์— ๋Œ€ํ•ด์„œ ์•Œ๊ฒŒ ๋˜๊ณ  ๋” ํฐ ์•ฑ์— ์ค‘์•™ ์ง‘์ค‘์‹ Loading Indicator๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์œ„ํ•ด ์ •๋ฆฌ๋ฅผ ๋‚จ๊ธด๋‹ค.

 

  1. isLoading & isFetching & useIsFetching

 

  2. useIsFetching ์ ์šฉํ•˜๊ธฐ

 

  3. ์ ์šฉ TEST


๋ฐฉ๋ฒ•

  1. isLoading & isFetching & useIsFetching

# useIsFetching

- ๊ฐ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด "๊ฐœ๋ณ„ ๋กœ๋”ฉ ์ธ๋””์ผ€์ดํ„ฐ (Loading Indicator)" ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ 

- "์ค‘์•™ ์ง‘์ค‘์‹ ๋กœ๋”ฉ ์ธ๋””์ผ€์ดํ„ฐ"๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์•ฑ์„ ์—…๋ฐ์ดํŠธ ํ•  ์˜ˆ์ •!

>> useIsFetching ์‚ฌ์šฉ!

 

## ์†Œ๊ทœ๋ชจ ์•ฑ (small apps)

- useQuery ๋ฐ˜ํ™˜ ๊ฐ์ฒด์—์„œ "isFetching" ์‚ฌ์šฉํ–ˆ์Œ!

- useQuery ๋ฐ˜ํ™˜ ๊ฐ์ฒด์—์„œ "isFetching"์„ ๋ถ„ํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

 

## isFetching > isLoading

- isLoading : isFetching๊ณผ ๋™์ผํ•˜๋ฉฐ ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ

  - ์ตœ์ดˆ 1ํšŒ ์š”์ฒญ์ด๋ฉฐ, ์บ์‹œ๊ฐ€ ์—†์„ ๋•Œ๋งŒ true

- isFetching : isLoading์„ ํ’ˆ๋Š” ๋” ํฐ ์นดํ…Œ๊ณ ๋ฆฌ์ด๋‹ค. (์บ์‹œ๊ฐ€ ์žˆ๋“  ์—†๋“ )

  - ๋ชจ๋“  ์š”์ฒญ์„ ํฌํ•จ, ์บ์‹œ ์œ ๋ฌด์™€ ๊ด€๊ณ„์—†์ด ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉด true

 

## ํฐ ์•ฑ (larger app)

- ๋” ํฐ ์•ฑ์—์„œ๋Š” ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ (Loading Spinner) ๋ฅผ ํ‘œ์‹œํ•ด์•ผํ•œ๋‹ค.

- Query๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ณผ์ •์— ์žˆ๋Š” ๊ฒฝ์šฐ, ์ค‘์•™ ์ง‘์ค‘์‹ ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ (Loading Spinner) ๊ฐ€ ์•ฑ ์ปดํฌ๋„ŒํŠธ์˜ ์ผ๋ถ€๊ฐ€ ๋  ๊ฒƒ์ž„

- ๊ฐ€์ ธ์˜ค๋Š” Query๊ฐ€ ์žˆ๋‹ค๋ฉด, ์œ„ ๊ธฐ๋Šฅ์„ On, ์—†์œผ๋ฉด OFF ํ•จ

 

>> "useIsFetching" ์€ ํ˜„์žฌ ๊ฐ€์ ธ์˜ค๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋งˆ๋ฒ•์˜ hook์ด๋‹ค.

    - ๋”ฐ๋ผ์„œ ๊ฐ Custom Hooks์— isFetching์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค!!


 

  2. useIsFetching ์ ์šฉํ•˜๊ธฐ

import {Spinner, Text} from "@chakra-ui/react";
import {useIsFetching} from "@tanstack/react-query";

export function Loading() {
โญ๏ธ  const isFetching = useIsFetching(); // useIsFetching์ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌด์—‡์ด๋“ ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
  // ์œ„ useIsFetching์€ ํ˜„์žฌ '๊ฐ€์ ธ์˜ค๊ธฐ(fetch)์ƒํƒœ'์ธ Query ํ˜ธ์ถœ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” number(์ •์ˆ˜)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
โญ๏ธ  const display = isFetching ? "inherit" : "none";
  // ๋”ฐ๋ผ์„œ isFetching์ด 0๋ณด๋‹ค ํฌ๋ฉด Fetching ์ƒํƒœ์˜ ํ˜ธ์ถœ์ด ์žˆ๊ณ , '์ฐธ'์ด๊ธฐ์— inherit = Loading Spinner ํ‘œ์‹œ!
  // ํ˜„์žฌ ๊ฐ€์ ธ์˜ค๋Š” ํ•ญ๋ชฉ์ด 0์ธ ๊ฒฝ์šฐ, 0์€ false์ด๊ธฐ์— none! = Loading Spinner ํ‘œ์‹œX

  return (
    <Spinner
    ... ์ค‘๋žต
    >
      <Text display="none">Loading...</Text>
    </Spinner>
  );
}

  3. ์ ์šฉ TEST

>> ์ดํ›„, ๊ฐœ๋ฐœ์ž๋„๊ตฌ > ๋„คํŠธ์›Œํฌ > ์ธํ„ฐ๋„ท ์†๋„์„ค์ •(?) > ๋น ๋ฅธ 4G ๋“ฑ > ์ƒˆ๋กœ๊ณ ์นจ์‹œ Loading Spinner๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

>> ๋”๋ถˆ์–ด, ์ฐฝ์„ ์ผœ๋‘” ์ƒํƒœ๋กœ ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €ํƒญ์— ๊ฐ”๋‹ค๊ฐ€ ๋Œ์•„์˜ค๋ฉด ๋ฐ”๋กœ ๋กœ๋“œ๊ฐ€ ๋˜๋Š”๋ฐ, 
์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ react-query์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” reFetch ๊ตฌ์„ฑ์ด๋‹ค!

 

๊ฐœ๋ฐœ์ž๋„๊ตฌ > ๋„คํŠธ์›Œํฌ > ์ธํ„ฐ๋„ท ์†๋„ ์„ค์ •(?)

 

 

728x90
๋ฐ˜์‘ํ˜•
LIST

๋Œ“๊ธ€