2024.03.05(화)
일부 자식을 DOM의 다른 부분으로 렌더링
createPortal(children, domNode, key?)
children
: React로 렌더링할 수 있는 모든 것domNode
: 이미 존재하고 있는 DOM nodekey
(optional): 포털의 key로 사용할 고유 문자열 또는 숫자children
을 제공된 domNode
안에 배치overflow: hidden
또는 모달을 방해하는 다른 스타일이 있는 컨테이너 안에 있더라도, portal을 사용하여 나머지 페이지 위에 떠 있는 모달을 만들 수 있음! 🔗useInfiniteQuery
Hookconst {
data,
error,
fetchNextPage,
hasNextPage,
isFetching,
isFetchingNextPage,
status,
} = useInfiniteQuery({
queryKey,
queryFn: ({ pageParam }) => fetchPage(pageParam),
initialPageParam: 1,
...options,
getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>
lastPage.nextCursor,
getPreviousPageParam: (firstPage, allPages, firstPageParam, allPageParams) =>
firstPage.prevCursor,
});
useQuery
와 비슷queryKey
, queryFn
, initialPageParam
는 필수data
{
pages,
pageParams
}
pages
flatMap
메서드를 사용하면 배열을 하나의 배열로 flatten 가능!pageParams
viewport와 target element가 서로 교차하는 영역이 달라지는 경우 이를 비동기적으로 감지
const intersectionObserver = new IntersectionObserver(callback[, options]);
callback
: (entries, observer) ⇒ void
entries
: threshold를 넘어간 요소를 나타내는 IntersectionObserverEntry
객체의 배열observer
: callback을 호출한 IntersectionObserver
options
(optional){
root,
rootMargin,
threshold
}
root
document viewport
rootMargin
"0px 0px 0px 0px”
threshold
0.0
: target의 pixel이 하나라도 보일 때 (0%)1.0
: target을 온전히 볼 수 있을 때 (100%)0.0
// 모든 target에 대한 주시 해제
IntersectionObserver.disconnect();
// 주어진 target element 주시 시작
IntersectionObserver.observe(targetElement);
// 모든 주시 target에 대한 IntersectionObserverEntry 배열 반환
const intersectionObserverEntries = intersectionObserver.takeRecords();
// 특정 target element에 대한 주시 해제
IntersectionObserver.unobserve(target);