跳到正文
cccskills
免费在 GitHub 公开

tanstack-pacer

TanStack Pacer best practices for execution control in React — debouncing, throttling, rate limiting, queuing, and batching. Use when implementing search inputs, scroll handlers, API rate limits, task queues, bulk operations, or any scenario requiring controlled execution timing with reactive state.

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(11)

  • SKILL.md5.9 KB
  • rules/async-patterns.md2.2 KB
  • rules/bat-batching.md2.3 KB
  • rules/config-options.md2.0 KB
  • rules/deb-debouncing.md2.0 KB
  • rules/devtools.md1.4 KB
  • rules/hook-selection.md2.4 KB
  • rules/que-queuing.md2.1 KB
  • rules/rl-rate-limiting.md2.2 KB
  • rules/state-reactivity.md1.8 KB
  • rules/thr-throttling.md1.8 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

TanStack Pacer

Version: @tanstack/react-pacer@latest Requires: React 16.8+, TypeScript recommended

Quick Setup

npm install @tanstack/react-pacer
import { useDebouncedCallback } from '@tanstack/react-pacer'

function SearchInput() {
  const debouncedSearch = useDebouncedCallback(
    (query: string) => fetchResults(query),
    { wait: 300 },
  )

  return <input onChange={(e) => debouncedSearch(e.target.value)} />
}

4 Hook Variants Per Utility

Each utility (Debouncer, Throttler, RateLimiter, Queuer, Batcher) provides 4 React hooks:

HookReturnsUse Case
use[Utility]InstanceFull control, custom state subscriptions
use[Utility]CallbackWrapped functionSimple event handler wrapping
use[Utility]State[value, setValue, instance]Debounced/throttled React state
use[Utility]Value[derivedValue, instance]Read-only derived value from props/state

PacerProvider (Optional)

import { PacerProvider } from '@tanstack/react-pacer'

<PacerProvider
  defaultOptions={{
    debouncer: { wait: 300 },
    throttler: { wait: 200 },
  }}
>
  <App />
</PacerProvider>

Devtools

npm install -D @tanstack/react-devtools @tanstack/react-pacer-devtools
import { TanStackDevtools } from '@tanstack/react-devtools'
import { pacerDevtoolsPlugin } from '@tanstack/react-pacer-devtools'

<TanStackDevtools plugins={[pacerDevtoolsPlugin()]} />

Utilities must have a key option to appear in devtools.

Rule Categories

PriorityCategoryRule FileImpact
CRITICALHook Selectionrules/hook-selection.mdCorrect hook choice per use case
CRITICALDebouncingrules/deb-debouncing.mdPrevents wasted API calls and flickering UI
HIGHThrottlingrules/thr-throttling.mdSmooth, evenly-spaced execution
HIGHState & Reactivityrules/state-reactivity.mdPrevents unnecessary re-renders
HIGHAsync Patternsrules/async-patterns.mdCorrect async execution with retry, abort, error handling
MEDIUMRate Limitingrules/rl-rate-limiting.mdEnforces execution budgets
MEDIUMQueuingrules/que-queuing.mdLossless ordered/priority task processing
MEDIUMBatchingrules/bat-batching.mdGroups operations for bulk processing
LOWConfigurationrules/config-options.mdDynamic options, providers, shared config
LOWDevtoolsrules/devtools.mdDebugging and monitoring utilities

Critical Rules

Always Do

  • Use hooks over function wrappers — useDebouncedCallback not debounce() for proper React lifecycle
  • Choose the right hook variant — useCallback for event handlers, useState for controlled inputs, useValue for derived values
  • Opt-in to state subscriptions — pass selector as 3rd arg: useDebouncer(fn, opts, (s) => ({ isPending: s.isPending }))
  • Use async variants for API calls — useAsyncDebouncedCallback gives error handling, retry, abort
  • Pass AbortSignal to fetch — getAbortSignal() enables cancellation of in-flight requests
  • Use key option for devtools — only keyed utilities appear in devtools panel

Never Do

  • Subscribe to all state — omit selector or use instance directly to avoid re-renders on every state change
  • Use debouncing when you need guaranteed execution — use throttling or queuing instead
  • Use rate limiting for evenly-spaced calls — rate limiting is bursty; use throttling for smooth spacing
  • Use debounce() function in React — no lifecycle cleanup; use useDebouncedCallback hook instead
  • Expect maxWait on Debouncer — Pacer has no maxWait; use Throttler for guaranteed periodic execution

Key Patterns

// Debounced search input with state
import { useDebouncedState } from '@tanstack/react-pacer'

function Search() {
  const [query, setQuery, debouncer] = useDebouncedState('', { wait: 300 })
  // query updates after 300ms pause; setQuery is immediate
  return <input onChange={(e) => setQuery(e.target.value)} />
}

// Async debounced API call with abort
import { useAsyncDebouncedCallback } from '@tanstack/react-pacer'

function AsyncSearch() {
  const search = useAsyncDebouncedCallback(
    async (query: string) => {
      const signal = search.getAbortSignal()
      const res = await fetch(`/api/search?q=${query}`, { signal })
      return res.json()
    },
    { wait: 300, onSuccess: (data) => setResults(data) },
  )
  return <input onChange={(e) => search(e.target.value)} />
}

// Throttled scroll handler
import { useThrottledCallback } from '@tanstack/react-pacer'

function ScrollTracker() {
  const onScroll = useThrottledCallback(
    () => trackScrollPosition(window.scrollY),
    { wait: 100 },
  )
  useEffect(() => {
    window.addEventListener('scroll', onScroll)
    return () => window.removeEventListener('scroll', onScroll)
  }, [onScroll])
}

// Derived debounced value from props
import { useDebouncedValue } from '@tanstack/react-pacer'

function FilteredList({ filter }: { filter: string }) {
  const [debouncedFilter] = useDebouncedValue(filter, { wait: 300 })
  return <ExpensiveList filter={debouncedFilter} />
}

// Async queue with concurrency
import { useAsyncQueuer } from '@tanstack/react-pacer'

function UploadQueue() {
  const queuer = useAsyncQueuer(uploadFile, { concurrency: 3 })
  return <button onClick={() => queuer.addItem(file)}>Upload</button>
}

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.

中文简介正在准备中。当前显示原文说明。

fellipeutaka/denji62026年8月3日 更新

Set up and optimize repositories for AI coding agents. Creates minimal AGENTS.md, CLAUDE.md symlink, docs/REQUIREMENTS.md, docs/BUSINESS-RULES.md, feedback loops, and deterministic enforcement (Claude Code hooks, OpenCode plugins). Use when user wants to make a repo AI-friendly, set up AGENTS.md/CLAUDE.md, document requirements/business rules for AI, add pre-commit hooks for AI workflows, or optimize codebase structure for coding agents.

中文简介正在准备中。当前显示原文说明。

fellipeutaka/denji62026年8月3日 更新

bun

免费

Bun runtime, package manager, bundler, and test runner. Use when running scripts with bun, managing packages, serving HTTP with Bun.serve, querying databases with Bun.sql/bun:sqlite/Bun.redis, shell scripting with $, using S3/file I/O, writing tests with bun:test, bundling or compiling to executable, or using any Bun-specific API (spawn, glob, semver, FFI, workers, plugins, HTMLRewriter).

中文简介正在准备中。当前显示原文说明。

fellipeutaka/denji62026年8月3日 更新

Write clean, readable, and maintainable code following principles from Robert C. Martin's "Clean Code" and Object Calisthenics. Use when writing, reviewing, or refactoring code to improve naming, function design, formatting, error handling, and class structure. Includes code smell detection and refactoring guidance.

中文简介正在准备中。当前显示原文说明。

fellipeutaka/denji62026年8月3日 更新

Create high-quality git commits: review/stage intended changes, split into logical commits, and write clear commit messages (including Conventional Commits). Use when the user asks to commit, craft a commit message, stage changes, or split work into multiple commits.

中文简介正在准备中。当前显示原文说明。

fellipeutaka/denji62026年8月3日 更新

denji

免费

Manage SVG icons as framework components using Denji CLI. Use when the user needs to add, remove, list, export, import, or manage SVG icons in React, Preact, Solid, Qwik, Vue, or Svelte projects. Triggers include requests to "add an icon", "set up icons", "manage SVG icons", "remove an icon", "list icons", "export icons", "import icons", "dry-run icon add", or any task involving Iconify icons as framework components.

中文简介正在准备中。当前显示原文说明。

fellipeutaka/denji62026年8月3日 更新

查看 fellipeutaka 的全部技能

报告此技能的问题