Angular bindings for Redux.
For Angular 1 see ng-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.
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.
- I already know what Redux and RxJS are. Give me the TL;DR.
- I'm just learning about Redux. Break it down for me!
- Talk is cheap. Show me a complete code example.
- Take me to the API docs.
Here are some examples of the angular-redux
family of packages in action:
- Using Redux with Angular - JS Toronto Meetup 2016-07-12
- Getting started with Redux
- Awesome Redux: Community Resources
@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:
- Using Angular's Dependency Injector with Action Creators
- Using Angular's Dependency Injector with Middlewares
- Managing Side-Effects with redux-observable Epics
- Using the Redux DevTools Chrome Extension
- @angular-redux/store and ImmutableJS
- Strongly Typed Reducers
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 yourangular-redux/store
clone and runnpm pack
). This will create a.tgz
file. - hook your 'local package' up to your example-app (
cd
to your example-app clone and runnpm 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.