reduxjs/react-redux
### [`v7.2.0`](https://togithub.com/reduxjs/react-redux/releases/v7.2.0)
[Compare Source](https://togithub.com/reduxjs/react-redux/compare/v7.1.3...v7.2.0)
This release fixes two bugs, an algorithmic problem with unsubscribing components and a memory leak with `connect`. It also has optimizations for production bundle size, and adds a couple small improvements to developer readability while debugging.
#### Changes
##### Bug Fixes
`connect` in v7 is implemented using hooks, and the hooks usage captures numerous values from the surrounding scope. We received a PR informing us that the way we were capturing these values would likely result in a copy of the first version of its props being kept alive indefinitely.
This memory leak has been fixed by extracting a custom hook that receives all the necessary values as arguments, so that they're not captured via closure.
We also received a PR letting us know that the unsubscribe logic had a quadratic algorithm in it, as removing a subscriber would use an `indexOf(listener)` check to remove that callback. If there were a large number of subscribers, that line's runtime would increase rapidly, causing slowdowns.
This algorithm has been replaced with tracking subscribers via a linked list, which drastically improves the runtime of this section of the code even with large numbers of subscribers.
Thanks to [@larrylin28](https://togithub.com/larrylin28) and [@wurstbonbon](https://togithub.com/wurstbonbon) for finding these bugs and submitting PRs to fix them!
##### Bundle Size Improvements
We've made a number of small tweaks to the codebase to improve the ability of bundlers to shake and minimize the final included size in a bundle. The net result is that [`react-redux@7.2.0` is smaller than 7.1.3](https://bundlephobia.com/result?p=react-redux@7.2.0), dropping 1.3K min and 0.6K min+gzip. (In fact, it's even smaller than the pre-hooks 7.0.0 when gzipped!)
Thanks to [@Andarist](https://togithub.com/Andarist) for doing most of the work on this!
##### Debugging Improvements
The `ReactReduxContext` instance now has a `displayName` set, so it should show up in the React DevTools as `ReactRedux.Provider`.
Also, when an error is caught in `useSelector` and re-thrown, we now append the original stack trace.
Thanks to [@pieplu](https://togithub.com/pieplu) and [@r3dm1ke](https://togithub.com/r3dm1ke) for these!
#### Changelog
- Fix memory leak issue with `UseEffect` ([@larrylin28](https://togithub.com/larrylin28) - [#1506](https://togithub.com/reduxjs/react-redux/issues/1506))
- Optimize createListenerCollection ([@wurstbonbon](https://togithub.com/wurstbonbon) - [#1523](https://togithub.com/reduxjs/react-redux/issues/1523))
- Rethrowing original errors thrown in selector functions ([@Andarist](https://togithub.com/Andarist) - [#1474](https://togithub.com/reduxjs/react-redux/issues/1474))
- Remove invariant in favor of doing NODE_ENV checks directly ([@Andarist](https://togithub.com/Andarist) - [#1472](https://togithub.com/reduxjs/react-redux/issues/1472))
- Wrap .propTypes and .displayName assignments with **DEV** check ([@Andarist](https://togithub.com/Andarist) - [#1471](https://togithub.com/reduxjs/react-redux/issues/1471))
- Add pure annotations to help with DCE ([@timdorr](https://togithub.com/timdorr) - [`5e0c50d`](https://togithub.com/reduxjs/react-redux/commit/5e0c50d))
- Inline this function. ([@timdorr](https://togithub.com/timdorr) - [`58ae5ed`](https://togithub.com/reduxjs/react-redux/commit/58ae5ed))
- Add a displayName on ReactReduxContext ([@pieplu](https://togithub.com/pieplu) - [#1462](https://togithub.com/reduxjs/react-redux/issues/1462))
### [`v7.1.3`](https://togithub.com/reduxjs/react-redux/releases/v7.1.3)
[Compare Source](https://togithub.com/reduxjs/react-redux/compare/v7.1.2...v7.1.3)
Forgot to remove a `console` statement before I published 7.1.2. Oops!
Lint your source code before publishing, folks.
#### [Changes](https://togithub.com/reactjs/react-redux/compare/v7.1.2...v7.1.3)
- Remove leftover console statement ([@markerikson](https://togithub.com/markerikson) - [`30101bb`](https://togithub.com/reduxjs/react-redux/commit/30101bb))
### [`v7.1.2`](https://togithub.com/reduxjs/react-redux/releases/v7.1.2)
[Compare Source](https://togithub.com/reduxjs/react-redux/compare/v7.1.1...v7.1.2)
This releases fixes a subtle timing bug with `connect` and `useSelector` in React Native environments, and adds the ability to pass through non-Redux-store values as a `store` prop.
##### Fixed Store Subscriptions in React Native
Our current implementation requires cascading updates down through connected components. This is primarily done during React's "commit phase" via the `useLayoutEffect` hook. Unfortunately, [React warns when `useLayoutEffect` is called in SSR environments](https://togithub.com/facebook/react/issues/14927), so we try to feature-detect that and fall back to `useEffect` just to avoid that warning.
Unfortunately, a tweak to the feature detection conditions during the pre-7.1.0 work caused the check to accidentally fail in React Native environments. This meant that `useEffect` was actually being used all the time, and this led to occasional timing bugs such as [#1313](https://togithub.com/reduxjs/react-redux/issues/1313) and [#1437](https://togithub.com/reduxjs/react-redux/issues/1437) . This affected the previous v7.1.x releases.
We've fixed that issue, and added additional test cases to ensure that our code works correctly under React Native.
See [#1444](https://togithub.com/reduxjs/react-redux/issues/1444) for more details on the feature detection and the fix.
##### Passing Through Non-Store Values
`connect` has always accepted passing a Redux store directly to connected components as a prop named `store` (with the exception of v6). As a result, the `store` prop has effectively been treated as a "reserved" prop, in much the same way that `key` and `ref` are "reserved" prop names handled by React.
Some users may be using the word "store" to describe their domain data, and have asked to allow variables that _aren't_ a Redux store through the `store` prop to the component ([#1393](https://togithub.com/reduxjs/react-redux/issues/1393)). We've finally been able to implement that capability.
#### [Changes](https://togithub.com/reactjs/react-redux/compare/v7.1.1...v7.1.2)
- Pass non-Redux-store values through the `store` prop ([@markerikson](https://togithub.com/markerikson) - [#1447](https://togithub.com/reduxjs/react-redux/issues/1447))
- Fix RN batching and effect behavior ([@markerikson](https://togithub.com/markerikson) - [#1444](https://togithub.com/reduxjs/react-redux/issues/1444))
- Remove unused `latestStoreState` field ([@Hypnosphi](https://togithub.com/Hypnosphi) - [#1426](https://togithub.com/reduxjs/react-redux/issues/1426))
- Mark the react renderers as optional peer deps. ([@timdorr](https://togithub.com/timdorr) - [`388d9e4`](https://togithub.com/reduxjs/react-redux/commit/388d9e4))
- Use the same condition for checking if SSR in useSelector.js as in connectAdvanced.js ([@LeoDanielsson](https://togithub.com/LeoDanielsson) - [#1419](https://togithub.com/reduxjs/react-redux/issues/1419))
Renovate configuration
:date: Schedule: At any time (no schedule defined).
:vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.
:recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
:no_bell: Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, check this box
This PR contains the following updates:
7.1.1
->7.2.0
Release Notes
reduxjs/react-redux
### [`v7.2.0`](https://togithub.com/reduxjs/react-redux/releases/v7.2.0) [Compare Source](https://togithub.com/reduxjs/react-redux/compare/v7.1.3...v7.2.0) This release fixes two bugs, an algorithmic problem with unsubscribing components and a memory leak with `connect`. It also has optimizations for production bundle size, and adds a couple small improvements to developer readability while debugging. #### Changes ##### Bug Fixes `connect` in v7 is implemented using hooks, and the hooks usage captures numerous values from the surrounding scope. We received a PR informing us that the way we were capturing these values would likely result in a copy of the first version of its props being kept alive indefinitely. This memory leak has been fixed by extracting a custom hook that receives all the necessary values as arguments, so that they're not captured via closure. We also received a PR letting us know that the unsubscribe logic had a quadratic algorithm in it, as removing a subscriber would use an `indexOf(listener)` check to remove that callback. If there were a large number of subscribers, that line's runtime would increase rapidly, causing slowdowns. This algorithm has been replaced with tracking subscribers via a linked list, which drastically improves the runtime of this section of the code even with large numbers of subscribers. Thanks to [@larrylin28](https://togithub.com/larrylin28) and [@wurstbonbon](https://togithub.com/wurstbonbon) for finding these bugs and submitting PRs to fix them! ##### Bundle Size Improvements We've made a number of small tweaks to the codebase to improve the ability of bundlers to shake and minimize the final included size in a bundle. The net result is that [`react-redux@7.2.0` is smaller than 7.1.3](https://bundlephobia.com/result?p=react-redux@7.2.0), dropping 1.3K min and 0.6K min+gzip. (In fact, it's even smaller than the pre-hooks 7.0.0 when gzipped!) Thanks to [@Andarist](https://togithub.com/Andarist) for doing most of the work on this! ##### Debugging Improvements The `ReactReduxContext` instance now has a `displayName` set, so it should show up in the React DevTools as `ReactRedux.Provider`. Also, when an error is caught in `useSelector` and re-thrown, we now append the original stack trace. Thanks to [@pieplu](https://togithub.com/pieplu) and [@r3dm1ke](https://togithub.com/r3dm1ke) for these! #### Changelog - Fix memory leak issue with `UseEffect` ([@larrylin28](https://togithub.com/larrylin28) - [#1506](https://togithub.com/reduxjs/react-redux/issues/1506)) - Optimize createListenerCollection ([@wurstbonbon](https://togithub.com/wurstbonbon) - [#1523](https://togithub.com/reduxjs/react-redux/issues/1523)) - Rethrowing original errors thrown in selector functions ([@Andarist](https://togithub.com/Andarist) - [#1474](https://togithub.com/reduxjs/react-redux/issues/1474)) - Remove invariant in favor of doing NODE_ENV checks directly ([@Andarist](https://togithub.com/Andarist) - [#1472](https://togithub.com/reduxjs/react-redux/issues/1472)) - Wrap .propTypes and .displayName assignments with **DEV** check ([@Andarist](https://togithub.com/Andarist) - [#1471](https://togithub.com/reduxjs/react-redux/issues/1471)) - Add pure annotations to help with DCE ([@timdorr](https://togithub.com/timdorr) - [`5e0c50d`](https://togithub.com/reduxjs/react-redux/commit/5e0c50d)) - Inline this function. ([@timdorr](https://togithub.com/timdorr) - [`58ae5ed`](https://togithub.com/reduxjs/react-redux/commit/58ae5ed)) - Add a displayName on ReactReduxContext ([@pieplu](https://togithub.com/pieplu) - [#1462](https://togithub.com/reduxjs/react-redux/issues/1462)) ### [`v7.1.3`](https://togithub.com/reduxjs/react-redux/releases/v7.1.3) [Compare Source](https://togithub.com/reduxjs/react-redux/compare/v7.1.2...v7.1.3) Forgot to remove a `console` statement before I published 7.1.2. Oops! Lint your source code before publishing, folks. #### [Changes](https://togithub.com/reactjs/react-redux/compare/v7.1.2...v7.1.3) - Remove leftover console statement ([@markerikson](https://togithub.com/markerikson) - [`30101bb`](https://togithub.com/reduxjs/react-redux/commit/30101bb)) ### [`v7.1.2`](https://togithub.com/reduxjs/react-redux/releases/v7.1.2) [Compare Source](https://togithub.com/reduxjs/react-redux/compare/v7.1.1...v7.1.2) This releases fixes a subtle timing bug with `connect` and `useSelector` in React Native environments, and adds the ability to pass through non-Redux-store values as a `store` prop. ##### Fixed Store Subscriptions in React Native Our current implementation requires cascading updates down through connected components. This is primarily done during React's "commit phase" via the `useLayoutEffect` hook. Unfortunately, [React warns when `useLayoutEffect` is called in SSR environments](https://togithub.com/facebook/react/issues/14927), so we try to feature-detect that and fall back to `useEffect` just to avoid that warning. Unfortunately, a tweak to the feature detection conditions during the pre-7.1.0 work caused the check to accidentally fail in React Native environments. This meant that `useEffect` was actually being used all the time, and this led to occasional timing bugs such as [#1313](https://togithub.com/reduxjs/react-redux/issues/1313) and [#1437](https://togithub.com/reduxjs/react-redux/issues/1437) . This affected the previous v7.1.x releases. We've fixed that issue, and added additional test cases to ensure that our code works correctly under React Native. See [#1444](https://togithub.com/reduxjs/react-redux/issues/1444) for more details on the feature detection and the fix. ##### Passing Through Non-Store Values `connect` has always accepted passing a Redux store directly to connected components as a prop named `store` (with the exception of v6). As a result, the `store` prop has effectively been treated as a "reserved" prop, in much the same way that `key` and `ref` are "reserved" prop names handled by React. Some users may be using the word "store" to describe their domain data, and have asked to allow variables that _aren't_ a Redux store through the `store` prop to the component ([#1393](https://togithub.com/reduxjs/react-redux/issues/1393)). We've finally been able to implement that capability. #### [Changes](https://togithub.com/reactjs/react-redux/compare/v7.1.1...v7.1.2) - Pass non-Redux-store values through the `store` prop ([@markerikson](https://togithub.com/markerikson) - [#1447](https://togithub.com/reduxjs/react-redux/issues/1447)) - Fix RN batching and effect behavior ([@markerikson](https://togithub.com/markerikson) - [#1444](https://togithub.com/reduxjs/react-redux/issues/1444)) - Remove unused `latestStoreState` field ([@Hypnosphi](https://togithub.com/Hypnosphi) - [#1426](https://togithub.com/reduxjs/react-redux/issues/1426)) - Mark the react renderers as optional peer deps. ([@timdorr](https://togithub.com/timdorr) - [`388d9e4`](https://togithub.com/reduxjs/react-redux/commit/388d9e4)) - Use the same condition for checking if SSR in useSelector.js as in connectAdvanced.js ([@LeoDanielsson](https://togithub.com/LeoDanielsson) - [#1419](https://togithub.com/reduxjs/react-redux/issues/1419))Renovate configuration
:date: Schedule: At any time (no schedule defined).
:vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.
:recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
:no_bell: Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by WhiteSource Renovate. View repository job log here.