This bugfix releas fixes an issue with large keepUnusedDataFor
values overflowing JS timers, exports the types for the Redux DevTools Extension option, and and improves behavior of URL string generation.
Changelog
keepUnusedDataFor
Timer Fix
keepUnusedDataFor
accepts a value in seconds. When there are no more active subscriptions for a piece of data, RTKQ will set a timer using setTimeout
, and keepUnusedDataFor * 1000
as the timer value.
We've been advising users that if they want to keep data in the cache forever that they should use a very large value for keepUnusedDataFor
, such as 10 years in seconds.
However, it turns out that JS engines use a 32-bit signed int for timers, and 32-bits in milliseconds is only 24.8 days. If a timer is given a value larger than that, it triggers immediately.
We've updated the internal logic to clamp the keepUnusedDataFor
value to be between 0 and THIRTY_TWO_BIT_MAX_TIMER_SECONDS - 1
.
Note that in RTK 1.9 (coming soon), RTKQ will also accept Infinity
as a special keepUnusedDataFor
value to indicate cached data should never be expired.
Other Changes
RTK inlines the TS types for the Redux DevTools Extension options to avoid an extra dependency, but the TS type for the options object wasn't exported publicly. We now export the DevToolsEnhancerOptions
type.
The logic for generating a final URL has been updated to avoid adding an extra trailing /
.
What's Changed
- Prevent
keepUnusedDataFor
values from overflowingsetTimeout
counter by @markerikson in #2595 - remove typeof undefined checks where not necessary 🐃🪒 by @phryneas in #1726
- Update RDT options types, and export those + AnyListenerPredicate by @markerikson in #2596
- Ensures there is no unexpected slash in url before query params by @ygrishajev in #2470
Full Changelog: v1.8.4...v1.8.5