框架
版本
防抖器 API 参考
节流器 API 参考
速率限制器 API 参考
队列 API 参考
批处理器 API 参考

使用速率限制回调

函数:useRateLimitedCallback()

ts
function useRateLimitedCallback<TFn>(fn, options): (...args) => boolean
function useRateLimitedCallback<TFn>(fn, options): (...args) => boolean

定义于:react-pacer/src/rate-limiter/useRateLimitedCallback.ts:59

一个 React hook,用于创建一个回调函数的限流版本。此 hook 本质上是 `@tanstack/pacer` 中导出的基本 `rateLimiter` 函数的包装器,但针对 React 进行了优化,提供了响应式选项和稳定的函数引用。

限流是一种简单的“硬限制”方法——它允许所有调用直到达到限制,然后阻止后续调用,直到窗口重置。与节流或防抖不同,它不尝试对调用进行间隔或智能合并。这可能导致快速执行的爆发,随后是所有调用都被阻止的时期。

速率限制器支持两种类型的窗口

  • 'fixed': 一个严格的窗口,在窗口期后重置。窗口内的所有执行都会计入限制,并且窗口会在期满后完全重置。
  • 'sliding': 一个滚动窗口,允许在旧的执行过期时进行新的执行。这提供了更一致的执行速率。

为了更平滑的执行模式,请考虑使用

  • useThrottledCallback:当您希望在执行之间保持一致的间隔时(例如 UI 更新)
  • useDebouncedCallback:当您希望将快速调用合并为一次执行时(例如搜索输入)

限流主要用于需要强制执行严格限制的场景,例如 API 限流或其他需要对执行频率设置硬性上限的场景。

与 `useRateLimiter` hook 相比,此 hook 提供了更简单的 API,使其成为基本限流需求的理想选择。但是,它不暴露底层的 RateLimiter 实例。

对于需要以下功能的进阶用法

  • 手动取消
  • 访问执行计数
  • 自定义 useCallback 依赖项

请考虑改用 `useRateLimiter` hook。

类型参数

TFn extends AnyFunction

参数

fn

TFn

options

RateLimiterOptions<TFn>

Returns (返回)

Function

参数

args

...Parameters<TFn>

Returns (返回)

boolean

示例

tsx
// Rate limit API calls to maximum 5 calls per minute with a sliding window
const makeApiCall = useRateLimitedCallback(
  (data: ApiData) => {
    return fetch('/api/endpoint', { method: 'POST', body: JSON.stringify(data) });
  },
  {
    limit: 5,
    window: 60000, // 1 minute
    windowType: 'sliding',
    onReject: () => {
      console.warn('API rate limit reached. Please wait before trying again.');
    }
  }
);
// Rate limit API calls to maximum 5 calls per minute with a sliding window
const makeApiCall = useRateLimitedCallback(
  (data: ApiData) => {
    return fetch('/api/endpoint', { method: 'POST', body: JSON.stringify(data) });
  },
  {
    limit: 5,
    window: 60000, // 1 minute
    windowType: 'sliding',
    onReject: () => {
      console.warn('API rate limit reached. Please wait before trying again.');
    }
  }
);
我们的合作伙伴
Code Rabbit
Unkey
订阅 Bytes

您的每周 JavaScript 资讯。每周一免费发送给超过 10 万开发者。

Bytes

无垃圾邮件。您可以随时取消订阅。

订阅 Bytes

您的每周 JavaScript 资讯。每周一免费发送给超过 10 万开发者。

Bytes

无垃圾邮件。您可以随时取消订阅。