Skip to content

v8.0.0-beta.3

Pre-release
Pre-release
Compare
Choose a tag to compare
@markerikson markerikson released this 06 Feb 19:56
· 419 commits to master since this release

This beta release fixes a regression with unsubscribe performance in useSelector, and does some minor internal cleanup in connect.

At this point, React-Redux v8 is likely feature-complete and stable. We still really want users to try this out and give us feedback before the final release! We'd also like to add some additional tests around SSR behavior.

The tentative plan is to do a final review of the code and behavior after React 18 goes final, then release React-Redux v8 final shortly after that.

Changelog

useSelector Unsubscribe Performance

In 2019, we fixed a a reported issue with useSelector unsubscriptions showing quadratic performance, due to use of a single listeners array in our Subscription class. The fix was to switch to using a linked list to track subscribers.

When we reworked useSelector to use useSyncExternalStore for v8, we passed store.subscribe directly and stopped subscribing via a Subscription instance, thinking that we might no longer need Subscription any more. However, Subscription is still used by <Provider>, so it won't be removed from the bundle anyway, and the switch to using store.subscribe regressed the unsubscription performance because it does still use a listeners array as well.

We've switched back to having useSelector subscribe to the Subscription instance from <Provider>, and verified that this re-resolves the unsubscription performance behavior. We've also added a perf test to ensure that we capture this intended behavior and don't accidentally regress on this again in the future.

Internal Cleanup

We've removed a couple additional references to the removed pure option in connect, and tweaked some of the types to remove a legacy signature for Provider that is no longer relevant.

What's Changed

  • test: Adjust type tests to be compatible with React 18 typings by @eps1lon in #1868
  • Switch back to Subscription in useSelector to fix unsubscribe perf by @markerikson in #1870
  • Cleanup more code after pure removal by @Andarist in #1859

Full Changelog: v8.0.0-beta.2...v8.0.0-beta.3