Community生產力與協作github.com

deckardger/tanstack-integration-best-practices

整合 TanStack Query、TanStack Router 與 TanStack Start 的最佳實務。涵蓋全端資料流、伺服器端渲染(SSR)及快取協調的設計模式。

tanstack-integration-best-practices 是什麼?

此技能提供了將 TanStack Query 與 TanStack Router 及 TanStack Start 進行深度整合的實戰指南。它專注於建立高效的全端資料流,確保客戶端與伺服器端的資料狀態同步,並最佳化伺服器端渲染(SSR)與快取策略。開發者可以學習到如何避免常見的資料競爭問題,並利用這些工具的特性來提升應用程式的效能與使用者體驗。支援的平台包括所有使用 TanStack 生態系的現代前端框架,如 React 與 Solid。核心概念圍繞著以查詢鍵(query keys)為中心的快取協調,以及透過 Router 的載入器(loaders)與 Query 的預取(prefetching)機制來實現流暢的資料載入。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/deckardger/tanstack-agent-skills/tree/main/skills/tanstack-integration-best-practices

Installed? Explore more 生產力與協作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

tanstack-integration-best-practices 是做什麼的?

整合 TanStack Query、TanStack Router 與 TanStack Start 的最佳實務。涵蓋全端資料流、伺服器端渲染(SSR)及快取協調的設計模式。

核心原則

  • 以查詢鍵為中心:使用一致的查詢鍵結構,讓 Router 與 Query 能協調快取。
  • 伺服器端預取:在 Router 的載入器中預取 Query 資料,實現無閃爍(flash-free)的頁面導航。
  • 快取同步:透過 TanStack Start 的伺服器函式(server functions)變更資料後,自動失效 Query 快取。

支援的平台

  • React (TanStack Router + TanStack Query)
  • Solid (Solid Router + TanStack Query)
  • 任何支援 TanStack Start 的全端框架

建議模式

1. 共用查詢鍵工廠

// lib/query-keys.ts
export const queryKeys = {
  posts: {
    all: ['posts'] as const,
    byId: (id: string) => ['posts', id] as const,
  },
}

2. 使用 Router 載入器預取

// routes/posts.$id.tsx
import { queryOptions, prefetchQuery } from '@tanstack/react-query'
import { createFileRoute } from '@tanstack/react-router'

const postQueryOptions = (id: string) =>
  queryOptions({
    queryKey: queryKeys.posts.byId(id),
    queryFn: () => fetchPost(id),
  })

export const Route = createFileRoute('/posts/$id')({
  loader: async ({ context, params }) => {
    await context.queryClient.prefetchQuery(postQueryOptions(params.id))
    return { id: params.id }
  },
})

3. 伺服器函式中使快取失效

// server/actions.ts
import { server$, useServerFn } from '@tanstack/start'
import { invalidateQueries } from '@tanstack/react-query'

export const updatePost = server$(async (data: PostData) => {
  // 更新資料庫
  await db.post.update(data)
  // 失效相關查詢
  return { success: true }
})

常見陷阱

  • 重複請求:確保 Router 載入器與 Query 元件不要同時發起相同請求。使用 prefetchQuery 統一管理。
  • 快取過期:在資料變更後,手動呼叫 invalidateQueries 避免用戶看到舊資料。
  • SSR 狀態水位:用 TanStack Start 的 Dehydrate 元件正確傳遞序列化後的快取狀態。

參考資源

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相關技能