A JS library for predictable global state management
This bugfix release removes the isMinified
internal check to fix a compat issue with Expo. That check has added in early 2016, soon after Redux 3.0 was released, at a time when it was still less common to use bundlers with proper production build settings. Today that check is irrelevant, so we've removed it.
Full Changelog: https://github.com/reduxjs/redux/compare/v4.2.0...v4.2.1
This release marks the original createStore
API as @deprecated
to encourage users to migrate to Redux Toolkit, and adds a new legacy_createStore
API as an alias without the deprecation warning.
Redux Toolkit (the @reduxjs/toolkit
package) is the right way for Redux users to write Redux code today:
https://redux.js.org/introduction/why-rtk-is-redux-today
Unfortunately, many tutorials are still showing legacy "hand-written" Redux patterns, which result in a much worse experience for users. New learners going through a bootcamp or an outdated Udemy course just follow the examples they're being shown, don't know that RTK is the better and recommended approach, and don't even think to look at our docs.
Given that, the goal is to provide them with a visual indicator in their editor, like createStore . When users hover over the createStore
import or function call, the doc tooltip recommends using configureStore
from RTK instead, and points them to that docs page. We hope that new learners will see the strikethrough, read the tooltip, read the docs page, learn about RTK, and begin using it.
To be extremely clear:
WE ARE NOT GOING TO ACTUALLY REMOVE THE createStore
API, AND ALL YOUR EXISTING CODE WILL STILL CONTINUE TO WORK AS-IS!
We are just marking createStore
as "deprecated":
"the discouragement of use of some feature or practice, typically because it has been superseded or is no longer considered efficient or safe, without completely removing it or prohibiting its use"
For additional details, see the extensive discussion in https://github.com/reduxjs/redux/issues/4325 .
redux
core package, or fully deprecate the entire redux
package and rename it to @reduxjs/core
. Unfortunately, those bring up too many complexities:
redux-starter-kit
to @reduxjs/toolkit
, and all of our docs and tutorials have pointed to it for the last three years. I don't want to put users through another whiplash package transition for no real benefitSo, this is the minimum possible approach we can take to reach out to users who otherwise would never know that they are following outdated patterns, while avoiding breaking running user code or having to completely rewrite our package and repo structure.
When a user imports createStore
in their editor, they will see a visual strikethrough. Hovering over it will show a doc tooltip that encourages them to use configureStore
from RTK, and points to an explanatory docs page:
Again, no broken code, and no runtime warnings.
If users do not want to see that strikethrough, they have three options:
configureStore
legacy_createStore
API that is now exported, which is the exact same function but with no @deprecation
tag. The simplest option is to do an aliased import rename:createStore
as deprecated, and add legacy_createStore
alias by @markerikson in https://github.com/reduxjs/redux/pull/4336
Full Changelog: https://github.com/reduxjs/redux/compare/v4.1.2...v4.2.0
⚠️ This is an experimental alpha release. Things may break. If they do, let us know! ⚠️
This release contains the TypeScript codebase conversion work we did in 2019, to let users check compatibility and see if this is suitable for publishing.
In 2019, we began a community-powered conversion of the Redux codebase to TypeScript. The original effort was discussed in #3500: Port to TypeScript, and the work was integrated in PR #3536: Convert to TypeScript.
However, the TS-converted code in master
has sat around since then, unused and unpublished, due to concerns about possible compatibility issues with the existing ecosystem (as well as general inertia on our part).
Given the recent updates to Reselect and Redux Thunk, where we successfully published new minor builds that contained conversions to TS and significant rewrites/improvements to the TS types, it's worth publishing the current conversion as an alpha to give the community a chance to report any compatibility issues.
In theory, this should be almost identical in both runtime behavior and types to the recently released 4.1.2 build, but it's very likely that some of the changes may cause types issues.
Please try this out and let us know how it works! We're especially interested in any TS types compatibility issues you might see.
You can provide feedback in #4129: Evaluate current Redux TS port status to determine remaining work for a 5.0 release
This release fixes a small specific TS types issue where state types that had a nested unknown
field inside would cause compilation failures when used as the preloadedState
argument.
Full Changelog: https://github.com/reduxjs/redux/compare/v4.1.1...v4.1.2
Just a small fix for Safari users in development mode.
This release shrinks our bundle size via error message extraction, updates several error messages for clarity, and optimizes our list of runtime dependencies.
Overall, version 4.1 shrinks from 2.6K min+gz to 1.6K min+gz thanks to these changes.
Be sure to check out the Redux Toolkit 1.6 alpha containing our new "RTK Query" data fetching APIs! It also includes Redux 4.1 as a dependency.
We now extract all of our error messages from production builds in order to save on bundle size, using a technique inspired from React's error code extraction. The error messages will still show as normal in development, but in production they will reference a specific numeric error code and provide a link to a Redux docs page that has the full error message.
An example of this is: https://redux.js.org/errors?code=5 , which shows the "can't subscribe while reducers are executing" error.
The error code extraction saves about 800 bytes out of a production build.
Thanks to @andrewmcgivery for doing all the hard work on implementing the error extraction!
We've also updated many of our error messages to provide additional details at runtime about what happened, especially runtime type checks such as "actions must be plain objects". They now provide a more specific type for the unexpected value, such as indicating promise
or function
:
expect(() => store.dispatch(() => {})).toThrow(
/the actual type was: 'function'/
)
expect(() => store.dispatch(new Date())).toThrow(
/the actual type was: 'date'/
)
We've updated the list of runtime dependencies for Redux:
symbol-observable
polyfill. This shrinks bundle size by a few bytes,loose-envify
dependency, which was only ever needed by Browserify users. If you still happen to be using Browserify, please review your build settings and see if you need to make any updates.@babel/runtime
to extract some additional helpers out of our bundle. It's likely that your app already is pulling in those helpers anyway, so that removes some potential duplication.We've merged fixes for a couple edge cases in the 4.x TS typings related to state types.
This pre-release for 4.1.0 shrinks our bundle size via tooling updates, and updates several error messages for clarity. This is all the changes we plan to have for 4.1, so if feedback looks good, we'll release 4.1.0 shortly.
The 4.1.0 release will have a more complete changelog, but summarizing:
symbol-observable
polyfillloose-envify
dependency@babel/runtime
helpersWe've also updated the error messages to clarify what's happening, provide more details when runtime type checks fail, and link to relevant documentation.
https://github.com/reduxjs/redux/compare/v4.0.5...v4.1.0-alpha.0
This release includes a memory leak fix, and a fix for removing reducers with replaceReducer and combineReducers.
There are also some TypeScript changes, which require version 3.5 or higher. This also removes our DeepPartial
type, which wasn't intended to be a public API. If you need this type, you can find an equivalent of likely higher quality in the utility-types
package.
Speaking of TypeScript, we are done with converting the code to TypeScript on master
and are looking to get some TS improvements in before launching 5.0. If you're interested in helping, feel free to submit a PR with anything you'd like to contribute.
This is a quick revert of a change to our typings that broke compatibility. Apologies for the problems.
Also, if you are experiencing type errors related to [Symbol.observable]
, please ensure you have the same version of redux installed for all your dependencies with npm ls redux
.
combineReducers
' type parameters (#3467 by @timdorr)