NotifyManager
notifyManager
는 TanStack Query에서 콜백의 스케줄링 및 배치를 관리합니다.
다음과 같은 메서드를 제공합니다:
notifyManager.batch
batch
는 전달된 콜백 내에서 스케줄된 모든 업데이트를 배치하는 데 사용됩니다.
이 메서드는 주로 queryClient의 업데이트를 최적화하기 위해 내부적으로 사용됩니다.
function batch<T>(callback: () => T): T;
notifyManager.batchCalls
batchCalls
는 고차 함수로, 콜백을 받아 그것을 감싸는 역할을 합니다.
이 감싸진 함수가 호출될 때마다 해당 콜백이 다음 배치에서 실행되도록 스케줄링됩니다.
type BatchCallsCallback<T extends Array<unknown>> = (...args: T) => void;
function batchCalls<T extends Array<unknown>>(
callback: BatchCallsCallback<T>
): BatchCallsCallback<T>;
notifyManager.schedule
schedule
은 함수를 다음 배치에서 실행되도록 스케줄링합니다.
기본적으로 배치는 setTimeout
을 통해 실행되지만, 이 설정은 변경할 수 있습니다.
function schedule(callback: () => void): void;
notifyManager.setNotifyFunction
setNotifyFunction
은 기본 notify function을 덮어씁니다.
이 함수는 실행되어야 할 때 콜백을 전달받습니다. 기본 notifyFunction
은 단순히 콜백을 호출합니다.
예를 들어, 테스트를 실행할 때 React.act
로 알림을 감싸는 데 사용할 수 있습니다:
import { notifyManager } from "@tanstack/react-query";
import { act } from "react-dom/test-utils";
notifyManager.setNotifyFunction(act);
notifyManager.setBatchNotifyFunction
setBatchNotifyFunction
은 배치된 업데이트에 사용할 함수를 설정합니다.
프레임워크가 커스텀 배칭 함수를 지원하는 경우, notifyManager.setBatchNotifyFunction
을 호출하여 TanStack Query에 이를 알릴 수 있습니다.
예를 들어, solid-query에서 배치 함수가 설정되는 방법은 다음과 같습니다:
import { notifyManager } from "@tanstack/query-core";
import { batch } from "solid-js";
notifyManager.setBatchNotifyFunction(batch);
notifyManager.setScheduler
setScheduler
는 다음 배치가 실행될 때를 스케줄링하는 커스텀 콜백을 구성합니다.
기본 동작은 setTimeout(callback, 0)
입니다.
import { notifyManager } from "@tanstack/react-query";
// 다음 마이크로태스크에서 배치를 스케줄링
notifyManager.setScheduler(queueMicrotask);
// 다음 프레임이 렌더링되기 전에 배치를 스케줄링
notifyManager.setScheduler(requestAnimationFrame);
// 미래의 특정 시점에 배치를 스케줄링
notifyManager.setScheduler((cb) => setTimeout(cb, 10));