Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tomevault-io/skills-registry --skill tanstack-pacer명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
| Use when this capability is needed.
> Use when this capability is needed.
Review architecture and API design for the vfs-s3 project. Use when the user mentions @architect, asks to review an issue's design, discuss module boundaries, API shape, or architectural decisions for vfs-s3. Also trigger when the user wants to create an ADR (Architecture Decision Record) or evaluate a technical approach for the project. Intended for dispatch from Codex automation or Claude routines; GitHub trigger phrase: @vfs-s3-bot please prepare design doc Use when this capability is needed.
SOC 직업 분류 기준
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.