μ¬μ©μκ° νμ΄μ§μ νΉμ μ§μ μ λλ₯΄κ±°λ λ²νΌμ ν΄λ¦νλ©΄ λ λ§μ λ°μ΄ν°κ° λ‘λ©λ©λλ€.
React Query λ λ°μ΄ν°μ νμ΄μ§ λ²νΈλ₯Ό μΆμ νκ² λ©λλ€.
무ν μ€ν¬λ‘€ μ΄λ β
μ¬μ©μκ° μ€ν¬λ‘€ ν λλ§λ€ μλ‘μ΄ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ κ² μ λλ€.
- λͺ¨λ λ°μ΄ν°λ₯Ό ν λ²μ κ°μ Έμ€λ κ²λ³΄λ€ ν¨μ¬ ν¨μ¨μ μ λλ€.
μ¬μ©νλ μ§μ
- μ¬μ©μκ° λ²νΌμ ν΄λ¦νμ¬ μλ‘μ΄ λ°μ΄ν°λ₯Ό μμ²νκ±°λ
- νμ΄μ§μ νΉμ μ§μ μ μ€ν¬λ‘€ νμ λ μ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ² νκ±°λ ( νμ΄μ§μ νλ¨ λ± )
β useInfiniteQuery μ νΉμ§
- λ°ν κ°μ²΄μμ λ°νλ λ°μ΄ν° νλ‘νΌν°μ ννκ° λ€λ¦ λλ€.
- useQuery : λ¨μν 쿼리 ν¨μμμ λ°νλλ λ°μ΄ν°
- useInfiniteQuery : λ κ°μ νλ‘νΌν°λ₯Ό κ°μ§κ³ μμ΅λλ€.
- νλλ λ°μ΄ν° νμ΄μ§ κ°μ²΄ μ λ°°μ΄μΈ pages
- κ° λ§€κ° λ³μ κ° κΈ°λ‘λμ΄ μλ pageParams ( ννκ² μ¬μ©λμ§λ μμ΅λλ€. )
λͺ¨λ 쿼리λ νμ΄μ§ λ°°μ΄μ κ΅μ ν μμλ₯Ό κ°μ§κ³ μκ³ κ·Έ μμλ ν΄λΉ 쿼리μ λν λ°μ΄ν°μ ν΄λΉ ν©λλ€.
- pageParams μ κ²μλ 쿼리μ ν€λ₯Ό μΆμ ν©λλ€.
β useInfiniteQuery ꡬ쑰
pageParam μ 쿼리 ν¨μ μ μ λ¬λλ 맀κ°λ³μ
useInfiniteQuery("쿼리 ν€",({pageParam = defaultUrl}) => fetchUrl(pageParam))
- 쿼리 ν€κ° λ€μ΄κ°λλ€.
- 쿼리 ν¨μκ° μ€νλλ λμ 맀κ°λ³μ, κ°μ²΄λ₯Ό ꡬ쑰 λΆν΄ν pageParam μ μ¬μ© ν©λλ€.
- κ·Έλ¦¬κ³ μ²« λ²μ§Έ Url λ‘ μ μν Url μ κΈ°λ³Έκ°μΌλ‘ μ€μ ν©λλ€.
- λ°λΌμ μμ ν¨μλ defaultUrl μ κΈ°λ³Έκ°μΌλ‘ νλ pageParam μ μ¬μ©ν΄μ ν΄λΉ pageParam μμ fetchUrl μ μ€ν ν©λλ€.
- React Queryκ° pageParamμ νμ¬ κ°μ μ μ§ ν©λλ€.
infiniteQuery μ μ΅μ μ μ¬μ©νλ λ°©μ μμ
- getNextPageParam : (lastPage, allPages)
- λ€μ νμ΄μ§λ‘ κ°λ λ°©μμ μ μνλ ν¨μ.
- lastPage μ λ°μ΄ν°μμ λλ allPages μ λ°μ΄ν°μμ λͺ¨λ νμ΄μ§μ λν λ°μ΄ν°λ₯Ό κ°μ Έμ΅λλ€.
- μ§κΈμ lastPage λ₯Ό μ¬μ©νλ€κ³ κ°μ νκ² μ΅λλ€.
- lastPage λ λ€μ νμ΄μ§μ Urlμ΄ λ¬΄μμΈμ§ μλ €μ€λλ€.
- pageParam μ μ λ°μ΄νΈ ν΄μ€λλ€.
β useInfiniteQuery νλ‘νΌν°
- fetchNextPage : μ¬μ©μκ° λ λ§μ λ°μ΄ν°λ₯Ό μμ²ν λ νΈμΆνλ ν¨μ
- λ λ§μ λ°μ΄ν°λ₯Ό μμ²νλ λ²νΌμ ν΄λ¦νκ±°λ, μ€ν¬λ¦°μ λ°μ΄ν°κ° μμ§λλ μ§μ μ λλ₯΄λ κ²½μ°
- hasNextPage
- getNextPageParam ν¨μμ λ°ν κ°μ κΈ°λ°μΌλ‘ ν©λλ€.
- μ΄ νλ‘νΌν°λ₯Ό useInfiniteQuery μ μ λ¬ν΄μ λ§μ§λ§ 쿼리μ λ°μ΄ν°λ₯Ό μ΄λ»κ² μ¬μ©ν μ§ μ§μ ν©λλ€.
- undefined μΈ κ²½μ°, λ μ΄μ λ°μ΄ν°κ° μλ€ λ μλ―Έμ΄κ³
- useInfiniteQuery μμ λ°ν κ°μ²΄μ ν¨κ» λ°νλ κ²½μ° hasNextPage λ κ±°μ§μ΄ λ©λλ€.
- isFetchingNextPage
- useQuery μλ μλ κ°λ
- useInfiniteQuery λ λ€μ νμ΄μ§λ₯Ό κ°μ Έμ€λμ§, μλλ©΄ μΌλ°μ μΈ ν¨μΉμΈμ§ κ΅¬λ³ ν μ μμ΅λλ€.
β The Flow (νλ¦)
- λ¨Όμ μ»΄ν¬λνΈκ° λ§μ΄νΈ(μμ±) λ©λλ€
const {data} = useInfiniteScroll(...)
- μ΄ μμ μμ useInfiniteScroll μ΄ λ°νλ κ°μ²΄μ data νλ‘νΌν°κ° μ μλμ΄ μμ§ μμ΅λλ€.(undefined)
- 쿼리λ₯Ό λ§λ€μ§ μμκΈ° λλ¬Έ
- Fetch first page κ·Έ λ€μ useInfiniteScroll μ 쿼리 ν¨μλ₯Ό μ¬μ©ν΄μ 첫 νμ΄μ§λ₯Ό κ°μ Έμ΅λλ€.
useInfiniteScroll({pageParam = defaultUrl} => ...)
- 쿼리 ν¨μλ useInfiniteScroll μ 첫 λ²μ§Έ μΈμμ΄κ³ pageParam μ μΈμλ‘ λ°μ΅λλ€.
- λ°λΌμ 첫 pageParam μ μ°λ¦¬κ° κΈ°λ³Έκ°μΌλ‘ μ μν κ²μ΄ λ©λλ€.
- ν΄λΉ pageParam μ μ¬μ©ν΄μ 첫 λ²μ§Έ νμ΄μ§λ₯Ό κ°μ Έμ€κ³ λ°ν κ°μ²΄ λ°μ΄ν°μ νμ΄μ§ νλ‘νΌν°λ₯Ό μ€μ ν©λλ€.
- data.pages[0] : {...}
- μΈλ±μ€κ° 0μΈ λ°°μ΄μ 첫 λ²μ§Έ μμλ₯Ό μ€μ ν©λλ€.
- {...} μ 쿼리 ν¨μκ° λ°ννλ κ°μ΄ λ©λλ€.
- getNextPageParam, Update pageParam λ°μ΄ν°κ° λ°νλ ν React Queryκ° getNextPageParam μ μ€μ ν©λλ€.
getNextPageParam : (lastPage, allPages) => ...
- useInfiniteScroll μ μ΅μ
- lastPage μ allPages λ₯Ό μ¬μ©ν΄μ pageParam μ μ λ°μ΄νΈνλ ν¨μ
- μ€ν¬λ‘€μ μμ§μ΄κ±°λ, λ²νΌμ λλ μ κ²½μ° - fetchNextPage, fetchNextPage ν¨μλ useInfiniteScroll μ΄ λ°ννλ κ°μ²΄μ μμ±
- μ¬μ©μκ° λ λ§μ λ°μ΄ν°λ₯Ό μμ²ν λ μ§μμ μΌλ‘ μ λ°μ΄νΈ ν©λλ€.
μ°Έκ³
'π Front-End > React.js' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
React + TypeScript(interface) (0) | 2022.10.26 |
---|---|
useInfiniteQuery νΈμΆ (0) | 2022.10.26 |
React Query - λ³μ΄(Mutation) (0) | 2022.10.25 |
React Query - isFetching VS. isLoading (0) | 2022.10.25 |
React Query - λ°μ΄ν° ν리ν¨μΉ(Pre-fetching) (0) | 2022.10.25 |