框架
版本
Debouncer API 参考
Throttler API 参考
速率限制器 API 参考
队列 API 参考
批处理器 API 参考
批处理器示例

useRateLimiter

函数:useRateLimiter()

ts
function useRateLimiter<TFn>(fn, options): RateLimiter<TFn>
function useRateLimiter<TFn>(fn, options): RateLimiter<TFn>

定义于:react-pacer/src/rate-limiter/useRateLimiter.ts:55

一个低级别的 React 钩子,用于创建一个 RateLimiter 实例来强制执行函数执行的速率限制。

此钩子设计灵活且与状态管理无关——它仅返回一个速率限制器实例,您可以将其与任何状态管理解决方案(useState、Redux、Zustand、Jotai 等)集成。

速率限制是一种简单的“硬限制”方法,它允许执行直到在时间窗口内达到最大计数,然后阻止所有后续调用,直到窗口重置。与节流或防抖不同,它不会尝试智能地隔开或折叠执行。

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

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

对于更平滑的执行模式:

  • 当您希望执行之间具有一致的间距时(例如 UI 更新),请使用节流
  • 当您想要折叠快速触发���事件时(例如搜索输入),请使用防抖
  • 仅当您需要强制执行硬限制时(例如 API 速率限制),才使用速率限制

该钩子返回一个包含以下内容的对象:

  • maybeExecute:受速率限制的函数,它遵守配置的限制
  • getExecutionCount:返回成功执行的次数
  • getRejectionCount:返回由于速率限制而被拒绝的执行次数
  • getRemainingInWindow:返回当前窗口中还允许多少次执行
  • reset:重置执行计数和窗口计时

类型参数

TFn extends AnyFunction

参数

fn

TFn

options

RateLimiterOptions<TFn>

返回

RateLimiter<TFn>

示例

tsx
// 基本速率限制 - 滑动窗口内每分钟最多调用 5 次
const { maybeExecute } = useRateLimiter(apiCall, {
  limit: 5,
  window: 60000,
  windowType: 'sliding',
});

// 监控速率限制状态
const handleClick = () => {
  const remaining = getRemainingInWindow();
  if (remaining > 0) {
    maybeExecute(data);
  } else {
    showRateLimitWarning();
  }
};
// 基本速率限制 - 滑动窗口内每分钟最多调用 5 次
const { maybeExecute } = useRateLimiter(apiCall, {
  limit: 5,
  window: 60000,
  windowType: 'sliding',
});

// 监控速率限制状态
const handleClick = () => {
  const remaining = getRemainingInWindow();
  if (remaining > 0) {
    maybeExecute(data);
  } else {
    showRateLimitWarning();
  }
};