
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
}pagesflatMap 메서드를 사용하면 배열을 하나의 배열로 flatten 가능!pageParamsviewport와 target element가 서로 교차하는 영역이 달라지는 경우 이를 비동기적으로 감지
const intersectionObserver = new IntersectionObserver(callback[, options]);callback: (entries, observer) ⇒ voidentries: threshold를 넘어간 요소를 나타내는 IntersectionObserverEntry 객체의 배열observer: callback을 호출한 IntersectionObserveroptions (optional){
root,
rootMargin,
threshold
}rootdocument viewportrootMargin"0px 0px 0px 0px”threshold0.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);