useSWRInfinite๋ฅผ ์ ๊ณต// ๊ธฐ๋ณธ ํํ
import useSWRInfinite from 'swr/infinite'
// ...
const { data, error, isValidating, mutate, size, setsize } = useSWRInfinite(getKey, fetcher?, options?);
useSWR๊ณผ ์ ์ฌํ ํํgetKey, fetcher, options๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ๋ฐ์useSWR์ด ๋ฐํํ๋ ๋ชจ๋ ๊ฐ(data, error, isValidating, mutate) + size, setSize(React state์ ๊ฐ์)๋ฅผ ๋ฐํgetKey : ํ์ฌ ํ์ด์ง์ ์ธ๋ฑ์ค(pageIndex)์ ์ด ์ ํ์ด์ง์ ๋ฐ์ดํฐ(previousPageData)๋ฅผ ๋ฐ๊ณ ํ์ด์ง์ ํค๋ฅผ ๋ฐํํ๋ ํจ์fetcher์ ์ํด ํ์ฉ๋ ๊ฐ์ ๋ฐํnull์ด ๋ฐํ๋๋ค๋ฉด, ํ์ด์ง์ ์์ฒญ์ด ์์๋์ง ์์const getKey = (pageIndex, previousPageData) => {
// ๋์ ๋๋ฌํ๋ฉด ํ์ด์ง๋ฅผ ์์ฒญํ์ง ์์
if(previousPageData && !previousPageData.length) return null;
// SWRํค ๋ฐํ
return `${API_ENDPOINT}?page=${pageIndex}&limit=10`;
}
fetcher : ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ํจ์๋ฅผ ๋ฐํํ๋ Promise๋ก SWR์ key๋ฅผ ๋ฐ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ๋น๋๊ธฐ ํจ์(useSWR์ fetcher์ ๋์ผ)
options : SWR hook์ ์ํ ์ต์
๊ฐ์ฒด, useSWR์ด ์ง์ํ๋ ๋ชจ๋ ์ต์
+ ์๋์ ๋ค ๊ฐ์ ์ต์
initialSize = 1 : ์ด๊ธฐ์ ๋ก๋ํด์ผ ํ๋ ํ์ด์ง ์revalidateAll = false : ํญ์ ๋ชจ๋ ํ์ด์ง์ ๊ฐฑ์ ์๋revalidateFirstPage = true : ํญ์ ์ฒซ ํ์ด์ง์ ๊ฐฑ์ ์๋persistSize = false : ์ฒซ ํ์ด์ง์ ํค๊ฐ ๋ณ๊ฒฝ๋ ๋, ํ์ด์ง ํฌ๊ธฐ๋ฅผ 1๋ก ์ด๊ธฐํํ์ง ์์(initialSize๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ initialSize)initialSize ์ต์
์ lifecycle์์ ๋ณ๊ฒฝํ ์ ์๋ค.data : ์ฃผ์ด์ง ํค์ ๋ํ ๋ฐ์ดํฐ์ ๊ฐ ํ์ด์ง์ response์ ๋ฐฐ์ด// data ์์
[
[
{ name: 'Alice', ... },
{ name: 'Bob', ... },
{ name: 'Cathy', ... },
...
],
[
{ name: 'John', ... },
{ name: 'Paul', ... },
{ name: 'George', ... },
...
],
...
]
error : fetcher๊ฐ ๋์ง ์๋ฌ ๋๋ undefined(useSWR์ error์ ๋์ผ)isValidating : ์์ฒญ์ด๋ ๊ฐฑ์ ์ ๋ก๋ฉ ์ฌ๋ถ(useSWR์ isValidating์ ๋์ผ)mutateuseSWR์ ๋ฐ์ธ๋ฉ ๋ mutateํจ์์ ๋์ผํ์ง๋ง ๋ฐ์ดํฐ ๋ฐฐ์ด์ ๋ค๋ฃธsize : ๊ฐ์ ธ์ฌ ํ์ด์ง ๋ฐ ๋ฐํํ ํ์ด์ง์ ์setSize : ๊ฐ์ ธ์ฌ ํ์ด์ง์ ์๋ฅผ ์ค์ console๋ก ํ์ธuseEffect(() => {
console.log(data);
}, [data]);


pageIndex์ setSize์ ๊ด๊ณsetSize๋ฅผ ํ ๋ ๋ง๋ค getKey์ pageIndex์ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ๋ํ๋๋์ง console๋ก ํ์ธ
โ console๋ก ํ์ธํด๋ณด๋ ์์ ์ค๋ช
๋ค์ด ์ดํด๊ฐ ๊ฐ๊ธฐ ์์ํ๋ค.
pageIndex์ ์ด๊ธฐ๊ฐ = 0limit=10์ผ๋ก ์ค์ ํ์ฌ ๋ฐ์ดํฐ๊ฐ 10๊ฐ์ฉ ํ๋์ ๋ฐฐ์ด๋ก ๋ฌถ์ธ๋ค.setSize์ ๋ฐ๋ผ ํ๋์ ๋ฐฐ์ด๋ก ๋ฌถ์ธ 10๊ฐ์ ๋ฐ์ดํฐ๊ฐ size๋งํผ ๋ํ๋๋ค.setSize(1)์ด๋ผ๋ฉด,pageIndex=0์ธ getKey ํธ์ถsetSize(3)์ด๋ผ๋ฉด,pageIndex=0์ธ getKey ํธ์ถpageIndex=1์ธ getKey ํธ์ถpageIndex=2์ธ getKey ํธ์ถsetSize์ ๊ฐ ๋งํผ pageIndex๊ฐ ํ๋์ฉ ์ฆ๊ฐํ๋ฉด์ getKey๊ฐ ํธ์ถ๋๋ ๋ฐฉ์Array.flat()์ ์ด์ฉํ์ฌ 2์ฐจ์ ๋ฐฐ์ด์ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ฐ๊ฟ์ฃผ๊ธฐArray.flat()์ V8 ๋ธ๋ผ์ฐ์ ์์ง์์ ์ต์ ํ ๋์ด ์์ง ์์ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค๊ณ ํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. 
Array.prototype.map()์ ์ฌ์ฉํ์ฌ ๋ง๋ฌด๋ฆฌ๐ค์ฐธ๊ณ
์ฐ์ ๋๋ฌด ๋ด์ฉ์ด ์์ฐจ๊ณ ์ข๋ค์~!