function createRateLimitedValue<TValue, TSelected>(
value,
initialOptions,
selector?): [Accessor<TValue>, SolidRateLimiter<Setter<TValue>, TSelected>]
function createRateLimitedValue<TValue, TSelected>(
value,
initialOptions,
selector?): [Accessor<TValue>, SolidRateLimiter<Setter<TValue>, TSelected>]
Definiert in: rate-limiter/createRateLimitedValue.ts:83
Ein High-Level-Solid-Hook, der eine ratenbegrenzte Version eines Wertes erstellt, der sich höchstens eine bestimmte Anzahl von Malen innerhalb eines Zeitfensters aktualisiert. Dieser Hook verwendet intern Solid's createSignal zur Verwaltung des ratenbegrenzten Zustands.
Ratenbegrenzung ist ein einfacher "Hartegrenze"-Ansatz – sie erlaubt alle Aktualisierungen, bis das Limit erreicht ist, und blockiert dann nachfolgende Aktualisierungen, bis das Fenster zurückgesetzt wird. Im Gegensatz zu Throttling oder Debouncing versucht sie nicht, Aktualisierungen zu verteilen oder intelligent zusammenzufassen. Dies kann zu Schüben schneller Aktualisierungen führen, gefolgt von Perioden ohne Aktualisierungen.
Der Ratenbegrenzer unterstützt zwei Arten von Fenstern
Für sanftere Aktualisierungsmuster sollten Sie in Betracht ziehen:
Ratenbegrenzung sollte hauptsächlich verwendet werden, wenn Sie strenge Limits erzwingen müssen, wie z. B. API-Ratenlimits.
Der Hook gibt ein Tupel zurück, das enthält
Für eine direktere Kontrolle über das Ratenbegrenzungsverhalten ohne Solid-Zustandsverwaltung sollten Sie stattdessen den Low-Level-Hook createRateLimiter in Betracht ziehen.
Der Hook verwendet TanStack Store für reaktives Zustandsmanagement über die zugrundeliegende Ratenbegrenzer-Instanz. Der selector-Parameter ermöglicht es Ihnen, anzugeben, welche Zustandsänderungen des Ratenbegrenzers reaktive Aktualisierungen auslösen werden, was die Leistung optimiert, indem unnötige Abonnements bei irrelevanten Zustandsänderungen verhindert werden.
Standardmäßig werden keine reaktiven Zustandsabonnements durchgeführt. Sie müssen die Zustandsverfolgung durch Angabe einer Selector-Funktion aktivieren. Dies verhindert unnötige reaktive Updates und gibt Ihnen die volle Kontrolle darüber, wann Ihre Komponente Zustandsänderungen abonniert. Nur wenn Sie einen Selector angeben, verfolgt das reaktive System die ausgewählten Zustandswerte.
Verfügbare ratenbegrenzte Zustandseigenschaften
• TValue
• TSelected = {}
Accessor<TValue>
RateLimiterOptions<Setter<TValue>>
(state) => TSelected
[Accessor<TValue>, SolidRateLimiter<Setter<TValue>, TSelected>]
// Default behavior - no reactive state subscriptions
const [rateLimitedValue, rateLimiter] = createRateLimitedValue(rawValue, {
limit: 5,
window: 60000,
windowType: 'sliding'
});
// Opt-in to reactive updates when limit state changes (optimized for UI feedback)
const [rateLimitedValue, rateLimiter] = createRateLimitedValue(
rawValue,
{ limit: 5, window: 60000 },
(state) => ({ isAtLimit: state.isAtLimit, remainingInWindow: state.remainingInWindow })
);
// Use the rate-limited value
console.log(rateLimitedValue()); // Access the current rate-limited value
// Access rate limiter state via signals
console.log('Is at limit:', rateLimiter.state().isAtLimit);
// Control the rate limiter
rateLimiter.reset(); // Reset the rate limit window
// Default behavior - no reactive state subscriptions
const [rateLimitedValue, rateLimiter] = createRateLimitedValue(rawValue, {
limit: 5,
window: 60000,
windowType: 'sliding'
});
// Opt-in to reactive updates when limit state changes (optimized for UI feedback)
const [rateLimitedValue, rateLimiter] = createRateLimitedValue(
rawValue,
{ limit: 5, window: 60000 },
(state) => ({ isAtLimit: state.isAtLimit, remainingInWindow: state.remainingInWindow })
);
// Use the rate-limited value
console.log(rateLimitedValue()); // Access the current rate-limited value
// Access rate limiter state via signals
console.log('Is at limit:', rateLimiter.state().isAtLimit);
// Control the rate limiter
rateLimiter.reset(); // Reset the rate limit window
Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.