πŸ“ React-Query 둜 λ¬΄ν•œμŠ€ν¬λ‘€ κ΅¬ν˜„ - observer 문제 ( κ°œμΈν”„λ‘œμ νŠΈ )

10_2pangΒ·2023λ…„ 8μ›” 22일
0

βš½οΈνŠΈλŸ¬λΈ”μŠˆνŒ…

λͺ©λ‘ 보기
88/94
post-thumbnail

πŸ‘¨β€πŸ’»Β μ‚¬κ±΄


λ¬΄ν•œμŠ€ν¬λ‘€μ„ κ΅¬ν˜„ν•˜κΈ°μœ„ν•΄, React-Query 의 useInfiniteQuery λ₯Ό μ‚¬μš©ν–ˆλ‹€.
처음 μ‚¬μš©ν–ˆμ„λ•ŒλŠ” ꡉμž₯히 아무 문제 없이 잘 μ‚¬μš©ν•˜μ˜€λ‹€.

μ»΄ν¬λ„ŒνŠΈ 뢄리λ₯Ό ν•˜λ©΄μ„œ , Redux 둜 ν…Œμ΄λΈ” μ»΄ν¬λ„ŒνŠΈμ˜ μ˜΅μ…˜κ³Ό Select λ°•μŠ€ μ»΄ν¬λ„ŒνŠΈμ˜ μ˜΅μ…˜μ„ μ—…λ°μ΄νŠΈ ν•˜κ³  λ©”μΈμ—μ„œ 데이터 νŒ¨μΉ­μ„ ν•˜μ˜€λ‹€. μ—¬κΈ°μ„œ λΆ€ν„° 4μ‹œκ°„λ™μ•ˆ 였λ₯˜λ₯Ό μ°Ύμ§€ λͺ»ν•˜κ³  헀딩을 ν•˜μ˜€λ‹€...

<main>
  <OptionSelect />
  <Table data={data} hasNextPage={hasNextPage} fetchNextPage={fetchNextPage} isDisabled={true} />
</main>

그리고 Table μ•ˆμ— Observer κ°€ 있고, Observer μ»΄ν¬λ„ŒνŠΈλŠ” hasNextPage κ°€ μ‘΄μž¬ν•˜λ©΄ λ™μž‘ν•œλ‹€.
그리고 Observer에 fetchNextPage λ₯Ό μ „λ‹¬ν•˜μ—¬, isIntersecting 이 1 이 되면 (κ΅μ°¨μ˜μ—­μ— λ“€μ–΄κ°€λ©΄) λ‹€μŒ νŽ˜μ΄μ§€λ₯Ό νŒ¨μΉ­ν•˜λ„λ‘ μ„€μ •ν•˜μ˜€λ‹€.

이게 μ°Έ,,,OptionSelect λ₯Ό 톡해, μ˜΅μ…˜μ„ 2κ°œμ΄μƒ μ£Όκ±°λ‚˜, ν•˜λ‚˜λ„ μ•ˆμ£Όλ©΄ μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜μ˜€λ‹€. λ¬Έμ œλŠ” 단 ν•œκ°œμ˜ μ˜΅μ…˜μ„ μ„ νƒν–ˆμ„λ•ŒλŠ” λ™μž‘ν•˜μ§€μ•ŠλŠ”λ‹€..

μ²˜μŒμ—λŠ” μƒνƒœκ΄€λ¦¬λ₯Ό μ—…λ°μ΄νŠΈν•˜λ©΄μ„œ useInfiniteQuery 의 pageParams κ°€ μ •μƒμ μœΌλ‘œ λ°›μ•„μ˜€μ§€ λͺ»ν•˜κ³ μžˆλ‚˜? μ•„λ‹ˆλ©΄ μ˜μ‘΄μ„± 배열이 잘λͺ»λ˜μ—ˆλ‚˜ ν–ˆλ‹€.


export function useFetchPlayers(selectedHeader: HeaderType, order: OrderType, filters?: any) {
  const queryResult = useInfiniteQuery<PlayerInfoType[]>(
    ['players', selectedHeader, order, JSON.stringify(filters)],
    ({ pageParam }) => fetchPlayers({ pageParam, selectedHeader, order, filters }),
    {
      getNextPageParam: (lastPage) => lastPage[lastPage.length - 1]?.UID,
    },
  );

  return queryResult;
}

filters 뢀뢄이 λ¬Έμ œκ°€ μžˆλ‹€κ³  νŒλ‹¨ν•˜μ—¬, 정말 λͺ¨λ“  방법을 λ‹€ λ™μ›ν•΄μ„œ μ°Ύμ•„λ³΄μ•˜μ§€λ§Œ μ‹€νŒ¨ν–ˆλ‹€.

아무리 생각해도 이해가 κ°€μ§€μ•Šμ•˜λ‹€.

βœ…Β ν•΄κ²°


μ—­μ‹œ 항상 해닡은 ν—ˆλ¬΄ν•˜λ‹€..

isIntersecting 에 집쀑

ν•œλ²ˆ observer μ»΄ν¬λ„ŒνŠΈμ—μ„œ entry λ₯Ό μ½˜μ†”λ‘œ 찍어 λ³΄μ•˜λ‹€. 정말 μ˜΅μ…˜μ„ ν•˜λ‚˜λ§Œ μ„ νƒν–ˆμ„λ•Œλ§Œ 0이 λ‚˜μ™”λ‹€.
κ·ΈλŸ¬λ‹€ '에이,,,μ„€λ§ˆ,,,κ΅μ°¨μ˜μ—­μ˜ λ¬Έμ œμΈκ°€?' ν–ˆλ‹€. μ΄μœ λŠ” μ²˜μŒμ— μ»΄ν¬λ„ŒνŠΈλ₯Ό λΆ„λ¦¬ν•˜μ§€ μ•Šμ•˜μ„λ•ŒλŠ” μž˜λ˜μ—ˆκ³ , UI 도 바뀐것이 μ—†μ—ˆκΈ° λ•Œλ¬Έμ΄λ‹€.
ν˜Ήμ‹œλ‚˜, 정말 ν˜Ήμ‹œλ‚˜ ν•˜λŠ” λ§ˆμŒμ— div 둜 κ°€μž₯ ν•˜λ‹¨μ— 곡백을 μ£Όμ—ˆλ”λ‹ˆ,,, ν›„,,, μ œλŒ€λ‘œ λ™μž‘μ΄ λ˜μ—ˆλ‹€.

<main>
  <OptionSelect />
  <Table data={data} hasNextPage={hasNextPage} fetchNextPage={fetchNextPage} isDisabled={true} />
  <div className='h-20'></div>
</main>

πŸ’­Β κ°œμ„ 


  • 거의 λͺ¨λ“  μ½”λ“œμ— λ¬΄μ•„μ§€κ²½μœΌλ‘œ ν„°μΉ˜λ₯Ό ν•˜μ˜€κΈ° λ•Œλ¬Έμ—, κΉ”λ”ν•˜κ²Œ 원볡을 ν•΄μ•Όν•œλ‹€.
  • 이제 κ²€μƒ‰μ°½λ§Œ κ΅¬ν˜„ν•˜λ©΄ ν™ˆν™”λ©΄μ€ 끝이 λ‚œλ‹€.일단은,,,
profile
μ£Όλ‹ˆμ–΄ ν”„λ‘ νŠΈμ—”λ“œ 개발자 이광렬 μž…λ‹ˆλ‹€ 🌸

0개의 λŒ“κΈ€