@angular-redux/store
Angular bindings for Redux.
For Angular 1 see ng-redux
What is Redux?
Redux is a popular approach to managing state in applications. It emphasises:
- A single, immutable data store.
- One-way data flow.
- An approach to change based on pure functions and a stream of actions.
You can find lots of excellent documentation here: Redux.
What is @angular-redux?
We provide a set of npm packages that help you integrate your redux store
into your Angular 2+ applications. Our approach helps you by bridging the gap
with some of Angular's advanced features, including:
- Change processing with RxJS observables.
- Compile time optimizations with
NgModule
and Ahead-of-Time compilation. - Integration with the Angular change detector.
Getting Started
Examples
Here are some examples of the angular-redux
family of packages in action:
Companion Packages
Resources
In-Depth Usage
@angular-redux/store
uses an approach to redux based on RxJS Observables to select
and transform
data on its way out of the store and into your UI or side-effect handlers. Observables
are an efficient analogue to reselect
for the RxJS-heavy Angular world.
Read more here: Select Pattern
We also have a number of 'cookbooks' for specific Angular topics:
Hacking on angular-redux/store
Want to hack on angular-redux/store or any of the related packages? Feel free to do so, but please test your changes before making any PRs.
Here's how to do that:
- Write unit tests. You can check that they work by running
npm test
. - Run the linter. If your editor doesn't do it automatically, do it
manually with
npm run lint
. - Test your changes in a 'real world scenario'. We use the example-app for this, using some npm
fakery to 'publish the package locally':
- clone the example app (
git clone https://github.com/angular-redux/example-app.git
) - generate a 'local package' (
cd
to your angular-redux/store
clone and run npm pack
). This will create a .tgz
file. - hook your 'local package' up to your example-app (
cd
to your example-app clone and run npm install --save /path/to/the/tgz/file/from/above
) - run
ng serve --aot
Please make sure your changes pass Angular's AoT compiler, because it's a bit finicky with TS syntax.