用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/tomevault-io/skills-registry --skill tanstack-pacer命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | tanstack-pacer |
| description | | Use when this capability is needed. |
Version: @tanstack/react-pacer@latest Requires: React 16.8+, TypeScript recommended
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)} />
}
Each utility (Debouncer, Throttler, RateLimiter, Queuer, Batcher) provides 4 React hooks:
| Hook | Returns | Use Case |
|---|---|---|
use[Utility] | Instance | Full control, custom state subscriptions |
use[Utility]Callback | Wrapped function | Simple 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 |
import { PacerProvider } from '@tanstack/react-pacer'
<PacerProvider
defaultOptions={{
debouncer: { wait: 300 },
throttler: { wait: 200 },
}}
>
<App />
</PacerProvider>
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.
| Priority | Category | Rule File | Impact |
|---|---|---|---|
| CRITICAL | Hook Selection | rules/hook-selection.md | Correct hook choice per use case |
| CRITICAL | Debouncing | rules/deb-debouncing.md | Prevents wasted API calls and flickering UI |
| HIGH | Throttling | rules/thr-throttling.md | Smooth, evenly-spaced execution |
| HIGH | State & Reactivity | rules/state-reactivity.md | Prevents unnecessary re-renders |
| HIGH | Async Patterns | rules/async-patterns.md | Correct async execution with retry, abort, error handling |
| MEDIUM | Rate Limiting | rules/rl-rate-limiting.md | Enforces execution budgets |
| MEDIUM | Queuing | rules/que-queuing.md | Lossless ordered/priority task processing |
| MEDIUM | Batching | rules/bat-batching.md | Groups operations for bulk processing |
| LOW | Configuration | rules/config-options.md | Dynamic options, providers, shared config |
| LOW | Devtools | rules/devtools.md | Debugging and monitoring utilities |
useDebouncedCallback not debounce() for proper React lifecycleuseCallback for event handlers, useState for controlled inputs, useValue for derived valuesuseDebouncer(fn, opts, (s) => ({ isPending: s.isPending }))useAsyncDebouncedCallback gives error handling, retry, abortAbortSignal to fetch — getAbortSignal() enables cancellation of in-flight requestskey option for devtools — only keyed utilities appear in devtools paneldebounce() function in React — no lifecycle cleanup; use useDebouncedCallback hook insteadmaxWait on Debouncer — Pacer has no maxWait; use Throttler for guaranteed periodic execution// 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= => search(e.target.value)} />
}
{ useThrottledCallback }
() {
onScroll = (
(.),
{ : },
)
( {
.(, onScroll)
.(, onScroll)
}, [onScroll])
}
{ useDebouncedValue }
() {
[debouncedFilter] = (filter, { : })
}
{ useAsyncQueuer }
() {
queuer = (uploadFile, { : })
}
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
基于 SOC 职业分类