This repository has been archived by the owner on Sep 23, 2020. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^4.0.6
->^7.0.0
Release Notes
reduxjs/react-redux
v7.2.1
Compare Source
This release improves
useSelector
value display in the React DevTools, fixes a potential race condition, and fixes a couple additional minor issues.Changes
useSelector
DevTools DisplayThe React DevTools normally show custom hooks with their inspected name (such as "Selector" for
useSelector
), and any calls to core hooks inside. This is not always informative, so React has theuseDebugValue
hook to allow custom hooks to specify what value should be shown instead.useSelector
now callsuseDebugValue
to specifically show the current selected value instead of its internal hooks usage.Bug Fixes
This release has a few different bug fixes:
reactReduxForwardedRef
to avoid a rare situation where someone else might be passing down a field namedforwardedRef
useSelector
error messageChangelog
v7.2.0
Compare Source
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 and @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
[email protected]
is smaller than 7.1.3, 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 for doing most of the work on this!
Debugging Improvements
The
ReactReduxContext
instance now has adisplayName
set, so it should show up in the React DevTools asReactRedux.Provider
.Also, when an error is caught in
useSelector
and re-thrown, we now append the original stack trace.Thanks to @pieplu and @r3dm1ke for these!
Changelog
UseEffect
(@larrylin28 - #1506)5e0c50d
)58ae5ed
)v7.1.3
Compare Source
Forgot to remove a
console
statement before I published 7.1.2. Oops!Lint your source code before publishing, folks.
Changes
30101bb
)v7.1.2
Compare Source
This releases fixes a subtle timing bug with
connect
anduseSelector
in React Native environments, and adds the ability to pass through non-Redux-store values as astore
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 whenuseLayoutEffect
is called in SSR environments, so we try to feature-detect that and fall back touseEffect
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 namedstore
(with the exception of v6). As a result, thestore
prop has effectively been treated as a "reserved" prop, in much the same way thatkey
andref
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
store
prop (@markerikson - #1447)latestStoreState
field (@Hypnosphi - #1426)388d9e4
)v7.1.1
Compare Source
This release is sponsored by Deft, providing technical teams to high-growth SaaS companies with the processes they need to scale successfully. Please reach out to see how we can help with your software development, systems architecture, and infrastructure design needs.
This release includes some new APIs for those that want to use a custom React Context with our Hooks API, a small memory optimization, and has a fix for when the
store
changes on aProvider
with incompatiblechildren
.Changes
create*Hook
factory APIs (#1309 by @ryaninvents)P.S. On the sponsorship section above, it's a thing we're trying out to see how it feels and if it causes any problems for your workflows. (Don't worry, no ads are coming to your npm installs!) The idea for future releases is to let those that contributed to that release have the opportunity to sponsor that release. We don't need donations, but we definitely do need PRs! Hopefully, it's a fair way to encourage them. Please let us know if it's a problem in any way.
v7.1.0
Compare Source
Hooks!
After much discussion, we've decided these Hook things are probably going to stick around, so we might as well add some. Many thanks to @MrWolfZ, @josepot, @perrin4869, and @mpeyper for their contributions and to everyone else that offered feedback, ideas, and critiques as we built them out. Go open source!
Changes
deps
argument touseSelector
(#1251 by @MrWolfZ)useRedux
(@markerikson)useActions
(@markerikson)deps
argument (#1272 by @josepot)shallowEqual
with reference equality inuseSelector
(#1288 by @perrin4869)v7.0.3
Compare Source
This release includes a bugfix for a timing issue in
connect()
, and also lowers our React peer dependency slightly to allow better usage with React Native 0.59.Changes
v7.0.2
Compare Source
This is a bug fix release with a small performance improvement and fix for nested component unmounting.
Changes
v7.0.1
Compare Source
React-Redux version 7 resolves the performance issues that were reported with version 6, and lays the groundwork for us to design and ship a public
useRedux()
-type Hooks API in a later 7.x release.The major change for this release is that
connect
is now implemented using Hooks internally. Because of this, we now require a minimum React version of 16.8.4 or higher.This release has undergone extensive performance benchmarking, and we're confident that it's the fastest version of React-Redux yet! We've also expanded our test suite to cover a number of additional use cases and scenarios.
For discussion on the reasons for the major version change and the development process, see:
issue #1177 - React-Redux Roadmap: v6, Context, Subscriptions, and Hooks.
For discussion on the possible design of a future public hooks API, see:
issue #1179: Discussion: Potential hooks API design
Changes
This release should be public-API-compatible with version 6. The only public breaking change is the update of our React peer dependency from 16.4 to 16.8.4.
In v6, we switched from individual components subscribing to the store, to having
<Provider>
subscribe and components read the store state from React's Context API. This worked, but unfortunately the Context API isn't as optimized for frequent updates as we'd hoped, and our usage patterns led to some folks reporting performance issues in some scenarios.In v7, we've switched back to using direct subscriptions internally, which should improve performance considerably.
(This does result in some changes that are visible to user-facing code, in that updates dispatched in React lifecycle methods are immediately reflected in later component updates. Examples of this include components dispatching while mounting in an SSR environment. This was the behavior through v5, and is not considered part of our public API.)
Batched Updates
React has an
unstable_batchedUpdates
API that it uses to group together multiple updates from the same event loop tick. The React team encouraged us to use this, and we've updated our internal Redux subscription handling to leverage this API. This should also help improve performance, by cutting down on the number of distinct renders caused by a Redux store update.connect
Rewritten with HooksWe've reimplemented our
connect
wrapper component to use hooks internally. While it may not be visible to you, it's nice to know we can take advantage of the latest React goodies!Public API Changes
Return of
store
as a PropWe've brought back the ability to pass a store as a prop directly to connected components. This was removed in version 6 due to internal implementation changes (components no longer subscribed to the store directly). Some users expressed concerns that working with context in unit tests was not sufficient. Since our components use direct subscriptions again, we've reimplemented this option, and that should resolve those concerns.
New
batch
API for Batched React UpdatesReact's
unstable_batchedUpdate()
API allows any React updates in an event loop tick to be batched together into a single render pass. React already uses this internally for its own event handler callbacks. This API is actually part of the renderer packages like ReactDOM and React Native, not the React core itself.Since React-Redux needs to work in both ReactDOM and React Native environments, we've taken care of importing this API from the correct renderer at build time for our own use. We also now re-export this function publicly ourselves, renamed to
batch()
. You can use it to ensure that multiple actions dispatched outside of React only result in a single render update, like this:If you are using an alternative React renderer, like the Ink CLI renderer, that method isn't available for us to import. In that case, you will need to change your code to import from the new
react-redux/es/alternate-renderers
entry point instead. (Usereact-redux/lib/alternate-renderers
for the CJS version). That entry point exports a no-op version ofbatch()
that just executes the callback immediately, and does not provide React batching.In that situation, you may want to consider aliasing
react-redux
to one of those alternate entry points in your build tool for the best compatibility, especially if you're using any other libraries that depend on React-Redux.Thanks to:
v7.0.0
Compare Source
Initial release, but we missed some updated docs. Ignore this 😄
v6.0.1
Compare Source
This is a minor release with support for react-hot-loader and a few small bug fixes for edge cases.
While you're here, please stop by #1177 to see our roadmap for the next versions of React Redux. We are aware that performance is not so hot in 6.0. Short version: We put too much traffic on React's context API, which isn't really designed for high levels of reads and writes. We're looking to reduce that load and get performance back on track in a minor release, so there won't be backwards compatibility concerns. We have a new extensive benchmark suite to keep us on track and ensure we're not regressing on speed in the future.
And yes, we know about Hooks. Check out #1179.
Changes
context
prop really contains a React context (#1134 by @casdevs)v6.0.0
Compare Source
🎉 This is our first big release supporting the new Context API added in React 16.4!
As such, we now require React 16.4 or higher. Make sure to update your version when updating to this release.
This work has been mostly lead by @cellog and @markerikson, with special guest appearances by yours truly and a whole cast of helpful reviewers.
The
withRef
option toconnect
has been replaced withforwardRef
. If{forwardRef : true}
has been passed toconnect
, adding a ref to the connected wrapper component will actually return the instance of the wrapped component.Passing
store
as a prop to a connected component is no longer supported. Instead, you may pass a customcontext={MyContext}
prop to both<Provider>
and<ConnectedComponent>
. You may also pass{context : MyContext}
as an option toconnect
.Behavior Changes
Any library that attempts to access the store instance out of legacy context will break, because we now put the store state into a
<Context.Provider>
instead. Examples of this includeconnected-react-router
andreact-redux-subspace
. (The current implementation does also put the store itself into that same context. While accessing the store in context is not part of our public API, we will still try to make it possible for other libraries to access it, with the understanding that this could break at any time.)Also, there is a behavior change around dispatching actions in constructors /
componentWillMount
. Previously, dispatching in a parent component's constructor would cause its children to immediately use the updated state as they mounted, because each component read from the store individually. In version 6, all components read the same current store state value from context, which means the tree will be consistent and not have "tearing". This is an improvement overall, but there may be applications that relied on the existing behavior.Changes
null
as a valid plain object prototype inisPlainObject()
(#1075 by @rgrove)v5.1.2
Compare Source
v5.1.1
Compare Source
null
as a valid plain object prototype inisPlainObject()
(#1075 by @rgrove)v5.1.0
Compare Source
The biggest fix is for
connect()
being used with React's newerforwardRef
,memo
, andlazy
APIs.We also have begun a complete rewrite of our docs for React Redux. Check them out! Many thanks to those who contributed: @markerikson, @sveinpg, @wgao19, @BTMPL, @pyliaorachel, @dagstuan, @Kerumen, and @carloluis (sorry if I forgot someone!). Docs are a great way to get started contributing to open source, so open a PR today! Check #1001 to see what else needs to be done.
We're also looking at overhauling Redux's documentation. Check out reduxjs/redux#2590 for the latest there.
Changes
v5.0.7
Compare Source
getDerivedStateFromProps
methodName
in error message (#852 by @pwnn)v5.0.6
Compare Source
v5.0.5
Compare Source
<Provider>
using a specific store key (#695 by @tleunen)v5.0.4
Compare Source
v5.0.3
Compare Source
v5.0.2
Compare Source
v5.0.1
Compare Source
dist/react-redux.js
anddist/react-redux.min.js
.v5.0.0
Compare Source
This release is brought to you by contributions from the following people: @jimbolla, @vhmth, @btd, @roncohen, @ynonp, and @appden. In addition, there were many non-code contributions in discussions on issues and testing the alpha, beta, and rc versions by many other folks (too many to list!). Thank you to everyone who made this a very positive, inclusive, well-critiqued, community-driven release!
TL;DR
connect()
connectAdvanced()
APIAPI Compatibility
Version 5.0 maintains API compatibility with v4.x but due to major internal changes and potential behavior differences across nearly all API surfaces, semver dictates a major version bump. Also, it's good marketing! 💰 Store state change notifications sent to components are now guaranteed to occur top-down, so if your code may behave differently if it relied on notifications happening out of order.
Internal Changes
Internally, the code for
connect
has been rewritten from the ground-up to be more modular, with the intention of greater maintainability and extensibility. This has also led to some new features and performance improvements.Performance improvements
Significant performance gains were achieved by avoiding extra calls to
setState()
andrender()
by ensuring the order of change notifications to occur top-down, matching React's natural flow. Performance tests and benchmarks are discussed in #416.Bugfixes
Some bugs/issues are resolved, related to performance loss and also impure components not re-rendering.
New features added to connect()
The behavior of
connect()
is now more customizable, by passing additional properties in theoptions
arg. These will be described in the API docs.New top level API: connectAdvanced()
The new implementation of
connect()
splits its behavior such that it is now a wrapper around a more-generalizedconnectAdvanced()
. ThisconnectAdvanced()
method can be called directly if you have extreme performance needs or want to craft an API different than that ofconnect()
. This will be described in the API docs.What's next?
We're looking at removing the
shouldComponentUpdate
optimization. Since this version is much more performant on its own, that isn't needed. This will fix long-standing problems with other libraries that use React'scontext
API. There are workarounds, but things should work without either library authors having to bend over backwards or React having to make API changes.We will accept bugfixes on the 4.x branch (the 3.x branch will be going away; but the tags to 3.x versions will remain!), but new features should be built against the
next
branch. We love PRs, so keep them coming!Renovate configuration
📅 Schedule: At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻️ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 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.