무νμ€ν¬λ‘€μ ꡬννκΈ°μν΄, 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 λΆλΆμ΄ λ¬Έμ κ° μλ€κ³ νλ¨νμ¬, μ λ§ λͺ¨λ λ°©λ²μ λ€ λμν΄μ μ°Ύμ보μμ§λ§ μ€ν¨νλ€.
μ무리 μκ°ν΄λ μ΄ν΄κ° κ°μ§μμλ€.
μμ νμ ν΄λ΅μ ν무νλ€..
νλ² observer μ»΄ν¬λνΈμμ entry λ₯Ό μ½μλ‘ μ°μ΄ 보μλ€. μ λ§ μ΅μ
μ νλλ§ μ ννμλλ§ 0μ΄ λμλ€.
κ·Έλ¬λ€ 'μμ΄,,,μ€λ§,,,κ΅μ°¨μμμ λ¬Έμ μΈκ°?' νλ€. μ΄μ λ μ²μμ μ»΄ν¬λνΈλ₯Ό λΆλ¦¬νμ§ μμμλλ μλμκ³ , UI λ λ°λκ²μ΄ μμκΈ° λλ¬Έμ΄λ€.
νΉμλ, μ λ§ νΉμλ νλ λ§μμ div λ‘ κ°μ₯ νλ¨μ 곡백μ μ£Όμλλ,,, ν,,, μ λλ‘ λμμ΄ λμλ€.
<main>
<OptionSelect />
<Table data={data} hasNextPage={hasNextPage} fetchNextPage={fetchNextPage} isDisabled={true} />
<div className='h-20'></div>
</main>