Docs
API REFERENCES
notifyManager

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));