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, 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 and #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 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). We've finally been able to implement that capability.
Changes
- Pass non-Redux-store values through the
store
prop (@markerikson - #1447) - Fix RN batching and effect behavior (@markerikson - #1444)
- Remove unused
latestStoreState
field (@Hypnosphi - #1426) - Mark the react renderers as optional peer deps. (@timdorr - 388d9e4)
- Use the same condition for checking if SSR in useSelector.js as in connectAdvanced.js (@LeoDanielsson - #1419)