Token导航 LogoToken导航TokenDH.com
研究检索执行命令github未标认证来源可访问许可证需确认审计通过

tanstack-querytanstack 查询

Agent Skill

tanstack-query 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

706

周安装

30

GitHub Stars

3

下载量

247
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:tanstack-query(tanstack 查询)
来源仓库:https://github.com/fellipeutaka/leon
仓库路径:skills/tanstack-query
安装命令:
npx skills add https://github.com/fellipeutaka/leon --skill tanstack-query
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/fellipeutaka/leon --skill tanstack-query

简介

tanstack-query 用于查找、检索和筛选相关信息。

  • 适合根据关键词快速定位候选结果。tanstack-query 属于研究检索类 Skill,可作为该场景下的辅助能力补充。
  • 通过 npx skills add 命令从指定仓库安装并使用该技能。
  • 使用前需确认权限范围和维护状态,避免触发不必要的联网或文件操作。
  • 建议结合原始 README 进一步核验具体用法和功能边界。

SKILL.md

TanStack Query v5

Version: @tanstack/react-query@5.90.x Requires: React 18.0+, TypeScript 4.7+

v5 New Features

  • useMutationState — cross-component mutation tracking without prop drilling
  • Simplified optimistic updates — via variables from pending mutations, no cache manipulation needed
  • throwOnError — renamed from useErrorBoundary
  • networkMode — offline/PWA support (online | always | offlineFirst)
  • useQueries with combine — merge parallel query results into single object
  • infiniteQueryOptions — type-safe factory for infinite queries (parallel to queryOptions)
  • maxPages — limit pages in cache for infinite queries (requires bi-directional pagination)
  • Mutation callback signature change (v5.89+)onError/onSuccess/onSettled now receive 4 params (added onMutateResult)

Quick Setup

npm install @tanstack/react-query@latest @tanstack/react-query-devtools@latest
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 1000 * 60 * 5, // 5 min
      gcTime: 1000 * 60 * 60,   // 1 hour
      refetchOnWindowFocus: false,
    },
  },
})

function App() {
  return (
    <QueryClientProvider client={queryClient}>
      <YourApp />
      <ReactQueryDevtools initialIsOpen={false} />
    </QueryClientProvider>
  )
}

Unified Devtools (Recommended with Multiple TanStack Libraries)

If using Query + Router (or other TanStack libraries), use the unified TanStackDevtools shell instead of individual devtools components:

npm install -D @tanstack/react-devtools
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { ReactQueryDevtoolsPanel } from '@tanstack/react-query-devtools'
import { TanStackDevtools } from '@tanstack/react-devtools'

function App() {
  return (
    <QueryClientProvider client={queryClient}>
      <YourApp />
      <TanStackDevtools
        config={{ position: 'bottom-right' }}
        plugins={[
          { name: 'TanStack Query', render: <ReactQueryDevtoolsPanel /> },
          // Add more plugins: Router, etc.
        ]}
      />
    </QueryClientProvider>
  )
}

Use *Panel variants (ReactQueryDevtoolsPanel, TanStackRouterDevtoolsPanel) when embedding inside TanStackDevtools.

import { useQuery, useMutation, useQueryClient, queryOptions } from '@tanstack/react-query'

const todosQueryOptions = queryOptions({
  queryKey: ['todos'],
  queryFn: async () => {
    const res = await fetch('/api/todos')
    if (!res.ok) throw new Error('Failed to fetch')
    return res.json()
  },
})

function useTodos() {
  return useQuery(todosQueryOptions)
}

function useAddTodo() {
  const queryClient = useQueryClient()
  return useMutation({
    mutationFn: async (newTodo: { title: string }) => {
      const res = await fetch('/api/todos', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(newTodo),
      })
      if (!res.ok) throw new Error('Failed to add')
      return res.json()
    },
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ['todos'] })
    },
  })
}

Rule Categories

PriorityCategoryRule FileImpact
CRITICALQuery Keysrules/qk-query-keys.mdPrevents cache bugs and data inconsistencies
CRITICALCachingrules/cache-configuration.mdOptimizes performance and data freshness
HIGHInvalidationrules/cache-invalidation.mdEnsures stale data is properly refreshed
HIGHMutationsrules/mut-basics.mdEnsures data integrity after writes
HIGHOptimistic Updatesrules/mut-optimistic-updates.mdResponsive UI during mutations
HIGHError Handlingrules/err-error-handling.mdPrevents poor user experiences
MEDIUMPrefetchingrules/pf-prefetching.mdImproves perceived performance
MEDIUMInfinite Queriesrules/inf-infinite-queries.mdPrevents pagination bugs
MEDIUMSSR/Hydrationrules/ssr-hydration.mdEnables proper server rendering
MEDIUMParallel Queriesrules/parallel-queries.mdDynamic parallel fetching
LOWPerformancerules/perf-optimization.mdReduces unnecessary re-renders
LOWOffline Supportrules/offline-support.mdEnables offline-first patterns

Critical Rules

Always Do

  • Object syntax for all hooks: useQuery({queryKey, queryFn,...options})
  • Array query keys: ['todos'], ['todos', id], ['todos', {filter}]
  • Throw errors in queryFn: if (!res.ok) throw new Error('Failed')
  • isPending for initial loading: if (isPending) return <Loading />
  • Invalidate after mutations: onSuccess: () => queryClient.invalidateQueries({queryKey: ['todos']})
  • queryOptions factory: reuse across useQuery, useSuspenseQuery, prefetchQuery
  • gcTime (not cacheTime): renamed in v5

Never Do

  • v4 array/function syntax: useQuery(['todos'], fetchTodos) — removed in v5
  • Query callbacks: onSuccess/onError/onSettled removed from queries (still work in mutations) — use useEffect instead
  • isLoading for "no data yet": meaning changed in v5 — use isPending
  • enabled with useSuspenseQuery: not available — use conditional rendering
  • keepPreviousData: removed — use placeholderData: keepPreviousData
  • refetch() for changed parameters: include params in queryKey instead, query auto-refetches

v4→v5 Migration Cheatsheet

v4v5Notes
useQuery(['key'], fn, opts)useQuery({queryKey, queryFn,...opts})Object syntax only
cacheTimegcTimeRenamed
isLoading (no data)isPendingisLoading = isPending && isFetching
keepPreviousData: trueplaceholderData: keepPreviousDataImport keepPreviousData helper
useErrorBoundarythrowOnErrorRenamed
onSuccess/onError/onSettled on queriesRemovedUse useEffect for side effects
pageParam = 0 defaultinitialPageParam: 0Required for infinite queries
status: 'loading'status: 'pending'Renamed
onError(err, vars, ctx)onError(err, vars, onMutateResult, ctx)v5.89+ added 4th param

Known Issues (v5.90.x)

  • Streaming SSR hydration mismatchvoid prefetchQuery + useSuspenseQuery with conditional isFetching render causes hydration errors. Workaround: await prefetch or don't render based on fetchStatus
  • useQuery hydration error with prefetchinguseQuery + server prefetch can mismatch isLoading between server/client. Use useSuspenseQuery instead
  • refetchOnMount ignored for errored queries — errors are always stale. Use retryOnMount: false in addition to refetchOnMount: false
  • useMutationState typesmutation.state.variables typed as unknown due to fuzzy matching. Cast explicitly in select callback
  • invalidateQueries only refetches active queries — use refetchType: 'all' to include inactive queries
  • Readonly query keys break in v5.90.8 — fixed in v5.90.9+

Key Patterns

// Dependent queries (B waits for A)
const { data: user } = useQuery({ queryKey: ['user', id], queryFn: () => fetchUser(id) })
const { data: posts } = useQuery({
  queryKey: ['posts', user?.id],
  queryFn: () => fetchPosts(user!.id),
  enabled: !!user,
})

// Parallel queries
const results = useQueries({
  queries: ids.map(id => ({ queryKey: ['item', id], queryFn: () => fetchItem(id) })),
  combine: (results) => ({ data: results.map(r => r.data), pending: results.some(r => r.isPending) }),
})

// Prefetch on hover
const handleHover = () => queryClient.prefetchQuery({ queryKey: ['item', id], queryFn: () => fetchItem(id) })

// Infinite scroll
useInfiniteQuery({
  queryKey: ['posts'],
  queryFn: ({ pageParam }) => fetchPosts(pageParam),
  initialPageParam: 0,
  getNextPageParam: (lastPage) => lastPage.nextCursor,
})

// Query cancellation
queryFn: async ({ signal }) => {
  const res = await fetch(`/api/search?q=${query}`, { signal })
  return res.json()
}

// Data transformation
useQuery({ queryKey: ['todos'], queryFn: fetchTodos, select: (data) => data.filter(t => t.completed) })

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

35.41%
按下载量换算87

Claude

30.99%
按下载量换算77

Cursor

18.1%
按下载量换算45

Gemini CLI

10.16%
按下载量换算25

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

执行命令

安装流程涉及命令执行,可能通过 npx skills add https://github.com/fellipeutaka/leon --skill tanstack-query 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills