useQuery<T> function

QueryState<T> useQuery<T>({
  1. required String key,
  2. required Future<T> fetcher(),
  3. Duration staleTime = Duration.zero,
  4. Duration cacheTime = const Duration(minutes: 5),
  5. int retries = 3,
})

A hook to fetch, cache, and update data dynamically.

Implementation

QueryState<T> useQuery<T>({
  required String key,
  required Future<T> Function() fetcher,
  Duration staleTime = Duration.zero,
  Duration cacheTime = const Duration(minutes: 5),
  int retries = 3,
}) {
  final queryClient = useQueryClient();
  final controller =
      useMemoized(() => queryClient.cache.build<T>(key), [key, queryClient]);

  final state = useValueListenable(controller);

  useEffect(() {
    controller.fetch(
      fetcher: fetcher,
      staleTime: staleTime,
      cacheTime: cacheTime,
      retries: retries,
    );
    return null;
  }, [controller]);

  return state;
}