본문으로 건너뛰기
cccskills
무료GitHub에 공개

tanstack-query-expert

Advanced TanStack Query (v5) expert. Covers useSuspenseQuery, infinite scrolling, optimistic mutations, SSR/React Server Components hydration, and advanced cache invalidation / Pakar manajemen state asinkron menggunakan TanStack Query (React Query) v5 dan Next.js App Router (SSR).

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md9.4 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

TanStack Query Expert (v5 + TanStack Router/Start Edition)

English | Bahasa Indonesia


<a name="english"></a>

English

Orchestration & Integration

Connects and orchestrates with relevant domain skills like brainstorming, zero-to-prod-orchestrator, and session-memory-manager to ensure cohesive execution.

Description

Production-grade TanStack Query (v5) mastery for modern React (v18/19) and Next.js (App Router) applications. Covers declarative data fetching, advanced cache invalidation, optimistic UI updates, Suspense boundaries, SSR hydration, and the new TanStack Router + TanStack Start ecosystem for full-stack type-safe applications.

Trigger Conditions

  • Refactoring data fetching logic (replacing useEffect + useState patterns).
  • Designing query key factories (Array-based, strictly typed).
  • Writing useMutation hooks with immediate Optimistic Updates.
  • Implementing Infinite Scrolling (useInfiniteQuery).
  • Using React Suspense with useSuspenseQuery.
  • Integrating TanStack Query with Next.js App Router (Server Components prefetching + Client Boundary hydration).
  • Building type-safe SPAs with TanStack Router (typed routes, route-level loaders).
  • Building full-stack apps with TanStack Start (server functions, RSC-like patterns).

Core Concepts & Rules of Thumb

  • Never use useEffect to fetch data if TanStack Query is available.
  • Never sync query data into local React state (e.g., useEffect(() => setLocalState(data), [data])). Derive state during render instead.
  • Stale != Garbage Collected: staleTime dictates when background refetch triggers. gcTime dictates how long inactive data stays in memory.
  • Always use queryOptions() helper to co-locate query definition and reuse it across components and loaders.

Advanced Query Patterns

1. queryOptions() Helper — The 2026 Best Practice

Co-locate your query definition using queryOptions() to share it between components and route loaders:

import { queryOptions } from '@tanstack/react-query';

export const userQueryOptions = (userId: string) =>
  queryOptions({
    queryKey: ['users', userId],
    queryFn: () => fetchUser(userId),
    staleTime: 5 * 60 * 1000, // 5 minutes
  });

// In component:
const { data } = useQuery(userQueryOptions(userId));

// In TanStack Router loader:
export const Route = createFileRoute('/users/$userId')({
  loader: ({ context: { queryClient }, params }) =>
    queryClient.ensureQueryData(userQueryOptions(params.userId)),
  component: UserPage,
});

2. Custom Hook & Suspense Pattern

Abstract useQuery into custom hooks. Use useSuspenseQuery for modern React architectures:

export function useUser(userId: string) {
  return useSuspenseQuery(userQueryOptions(userId));
}

3. Query Key Factories (Mandatory for Scale)

Use factories to prevent typos and ensure invalidation targets the correct subsets:

export const userKeys = {
  all: ['users'] as const,
  lists: () => [...userKeys.all, 'list'] as const,
  list: (filters: string) => [...userKeys.lists(), { filters }] as const,
  details: () => [...userKeys.all, 'detail'] as const,
  detail: (id: string) => [...userKeys.details(), id] as const,
};

4. Optimistic Updates (v5 Best Practice)

Give users instant feedback by updating the cache before the server responds:

const mutation = useMutation({
  mutationFn: updateTodo,
  onMutate: async (newTodo) => {
    await queryClient.cancelQueries({ queryKey: todoKeys.lists() });
    const previous = queryClient.getQueryData(todoKeys.lists());
    queryClient.setQueryData(todoKeys.lists(), (old) =>
      old?.map(t => t.id === newTodo.id ? newTodo : t)
    );
    return { previous };
  },
  onError: (err, _, context) => {
    queryClient.setQueryData(todoKeys.lists(), context?.previous);
  },
  onSettled: () => queryClient.invalidateQueries({ queryKey: todoKeys.lists() }),
});

5. TanStack Router — Type-Safe Client-Side Routing

TanStack Router is the recommended router for SPAs in 2026 — fully type-safe routes, search params, and loaders:

import { createRootRoute, createRoute, createRouter } from '@tanstack/react-router';

const rootRoute = createRootRoute({ component: RootLayout });

const usersRoute = createRoute({
  getParentRoute: () => rootRoute,
  path: '/users',
  loader: ({ context: { queryClient } }) =>
    queryClient.ensureQueryData(usersQueryOptions()),
  component: UsersPage,
});

6. TanStack Start — Full-Stack Framework

TanStack Start brings server functions and SSR to TanStack Router apps — a Vite-powered alternative to Next.js for SPAs that need SSR:

import { createServerFn } from '@tanstack/start';

// Type-safe server function (runs on server)
const getUser = createServerFn({ method: 'GET' })
  .validator(z.object({ userId: z.string() }))
  .handler(async ({ data }) => {
    return db.user.findUnique({ where: { id: data.userId } });
  });

7. Next.js App Router SSR Hydration

Prefetch on the server and hydrate on the client seamlessly:

// Server Component (app/users/page.tsx)
export default async function UsersPage() {
  const queryClient = new QueryClient();
  await queryClient.prefetchQuery(usersQueryOptions());
  return (
    <HydrationBoundary state={dehydrate(queryClient)}>
      <UsersList />
    </HydrationBoundary>
  );
}

Troubleshooting

  • Infinite Fetching Loops: Check your queryFn. Unhandled exceptions trigger 3 auto-retries. Ensure stable query keys (no object literals in render).
  • staleTime vs gcTime: If gcTime < staleTime, data is deleted from memory before it becomes stale — this defeats the cache. Always set gcTime >= staleTime.
  • Hydration Mismatch: Ensure server and client produce identical initial query data — check for timezone or locale differences.

<a name="bahasa-indonesia"></a>

Bahasa Indonesia

Integrasi Orkestrasi

Terhubung dan mengorkestrasi skill domain yang relevan seperti brainstorming, zero-to-prod-orchestrator, dan session-memory-manager untuk memastikan eksekusi yang kohesif.

Deskripsi

Penguasaan TanStack Query (v5) tingkat produksi untuk aplikasi React modern (v18/19) dan Next.js (App Router). Mencakup data fetching deklaratif, invalidasi cache lanjutan, optimistic UI, Suspense boundaries, hidrasi SSR, serta ekosistem TanStack Router + TanStack Start untuk aplikasi full-stack yang type-safe.

Kondisi Pemicu

  • Refactoring logika data fetching (menggantikan useEffect + useState).
  • Merancang query key factories berbasis Array yang type-safe.
  • Menulis hook useMutation dengan Optimistic Updates instan.
  • Mengimplementasikan Infinite Scrolling (useInfiniteQuery).
  • Memanfaatkan React Suspense dengan useSuspenseQuery.
  • Mengintegrasikan TanStack Query dengan Next.js App Router (prefetching RSC + hidrasi client boundary).
  • Membangun SPA type-safe dengan TanStack Router (rute bertipe, route-level loaders).
  • Membangun aplikasi full-stack dengan TanStack Start (server functions, pola mirip RSC).

Aturan Utama & Prinsip

  • Jangan pernah gunakan useEffect untuk fetch data jika TanStack Query tersedia.
  • Jangan pernah sinkronkan data query ke state lokal React.
  • staleTime: kapan refetch latar belakang dipicu. gcTime: berapa lama data tidak aktif di memori.
  • Selalu gunakan helper queryOptions() untuk mendefinisikan dan berbagi query definition.

Pola Tingkat Lanjut

1. Helper queryOptions() — Best Practice 2026

Co-locate definisi query menggunakan queryOptions() untuk berbagi antara komponen dan route loader. Lihat contoh kode di bagian English.

2. Custom Hook & Suspense Pattern

Abstraksikan useQuery ke dalam custom hook. Gunakan useSuspenseQuery untuk loading state yang ditangani oleh <Suspense>.

3. Query Key Factories

Gunakan factory untuk mencegah typo dan memastikan invalidation menargetkan subset data yang tepat.

4. Optimistic Updates

Perbarui cache sebelum server merespons untuk umpan balik instan kepada pengguna.

5. TanStack Router

Router client-side yang fully type-safe untuk SPA — rute, search params, dan loader semuanya bertipe. Direkomendasikan untuk proyek SPA baru di 2026 (menggantikan React Router).

6. TanStack Start

Framework full-stack berbasis Vite dengan server functions type-safe — alternatif Next.js untuk SPA yang membutuhkan SSR.

7. Hidrasi SSR Next.js App Router

Prefetch di Server Component, lalu wrap dengan <HydrationBoundary> agar data langsung tersedia di Client Component tanpa request tambahan.

Pemecahan Masalah

  • Loop Fetching: Query key tidak stabil atau queryFn yang melempar error tak tertangani.
  • staleTime vs gcTime: Jangan set gcTime lebih kecil dari staleTime.
  • Hydration Mismatch: Pastikan server dan client menghasilkan data awal yang identik.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Expert guide for automated and manual Web Accessibility (a11y) testing — axe-core, Pa11y, Playwright a11y, screen reader testing, and WCAG 2.2 Level AA/AAA compliance / Panduan ahli pengujian aksesibilitas web.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

roedyrustam/vibes-plug772026년 10월 18일 업데이트

Expert guide for intelligent model cascading and routing — complexity-scored task routing from Flash/Haiku to Sonnet/Opus/Astra, dynamic escalation with quality gates, 40-60% token cost reduction while maintaining output quality / Panduan ahli untuk kaskade dan routing model cerdas — routing tugas berbasis skor kompleksitas dari Flash/Haiku ke Sonnet/Opus/Astra, eskalasi dinamis dengan gerbang kualitas, pengurangan biaya token 40-60% dengan kualitas output terjaga.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

roedyrustam/vibes-plug772026년 10월 18일 업데이트

Expert guide for Affective Computing, emotional AI, and real-time sentiment analysis through native multimodal tokens (voice intonation and facial micro-expressions) / Panduan ahli komputasi afektif, AI emosional, dan analisis sentimen real-time melalui token multimodal native.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

roedyrustam/vibes-plug772026년 10월 18일 업데이트

Expert guide for AI-assisted coding workflows — agentic code generation, multi-agent code swarms, self-healing CI/CD, automated PR review, spec-to-code pipelines, codebase knowledge graphs, and human-in-the-loop approval gates / Panduan ahli untuk workflow pengkodean berbasis AI — generasi kode agentic, code swarm multi-agen, CI/CD self-healing, review PR otomatis, pipeline spec-to-code, knowledge graph codebase, dan gate persetujuan human-in-the-loop.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

roedyrustam/vibes-plug772026년 10월 18일 업데이트

Expert guide for autonomous Machine-to-Machine (M2M) agent settlement, dual-rail fiat & stablecoin micro-clearing, dynamic budget envelopes, and cryptographic agent invoicing / Panduan ahli settlement otonom antar-agen (M2M), kliring mikro dual-rail fiat & stablecoin, pagu anggaran dinamis, dan penagihan agen kriptografis.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

roedyrustam/vibes-plug772026년 10월 18일 업데이트

Expert guide for long-term episodic memory integration (Mem0 v2, Letta/MemGPT, Zep v2), memory tier architecture, pgvector HNSW storage, and unified context management for autonomous AI agents / Panduan ahli untuk integrasi memori episodik jangka panjang (Mem0 v2, Letta/MemGPT, Zep v2), arsitektur tier memori, penyimpanan pgvector HNSW, dan manajemen konteks terpadu untuk agen AI otonom.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

roedyrustam/vibes-plug772026년 10월 18일 업데이트

roedyrustam의 스킬 모두 보기

이 스킬의 문제 신고