11. Redux principle
View Store
• Reducers
• Actions
State
Dispatch action
Update state
with reducers
This is redux related code, it’s just JS
12. Redux principle
View Store
• Reducers
• Actions
State
Dispatch action
Update state
with reducers
This is redux related code, it’s just JS
Update view
16. Angular 2 app
store
cars: […]
bikes: […]
@Input cars
…
Subscribes to store.cars
Subscribes to store.bikes
17. Angular 2 app
store
cars: […]
bikes: […]
@Input cars
@Input cars
…
…
Subscribes to store.cars
Subscribes to store.bikes
18. Angular 2 app
……
store
cars: […]
bikes: […]
@Input cars
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
19. Angular 2 app
……
store
cars: […]
bikes: […]
@Input cars
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
…
20. Angular 2 app
……
store
cars: […]
bikes: […]
@Input cars
… …
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
…
@Input bike x @Input bike y
21. Angular 2 app
……
store
cars: […]
bikes: […]
@Input cars
… …
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
@Input bike x @Input bike y
…
22. …
Angular 2 app
……
store
cars: […]
bikes: […]
@Input cars
… …
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
@Input bike x @Input bike y
23. …
Angular 2 app
……
store
cars: […]
bikes: […]
@Input cars
… …
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
@Input bike x @Input bike y
@Output
addBike(bike)
24. …
Angular 2 app
……
store
cars: […]
bikes: […]
@Input cars
… …
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
@Input bike x @Input bike y
Dispatch
{type:ADD_BIKE: payload: {bike}}
@Output
addBike(bike)
25. …
Angular 2 app
……
@Input cars
… …
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
@Input bike x @Input bike y
Dispatch
{type:ADD_BIKE: payload: {bike}}
store
cars: […]
bikes: […]
@Output
addBike(bike)
26. …
Angular 2 app
……
@Input cars
… …
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
@Input bike x @Input bike y
store
cars: […]
bikes: […]
27. …
Angular 2 app
……
@Input cars
… …
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
@Input bike x @Input bike y
store
cars: […]
bikes: […]
28. …
Angular 2 app
……
@Input cars
… …
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
@Input bike x @Input bike y
store
cars: […]
bikes: […]
29. …
Angular 2 app
……
@Input cars
… …
@Input cars
@Input car y
@Input car x
…
…
Subscribes to store.cars
Subscribes to store.bikes
@Input bikes
@Input bike x @Input bike y
store
cars: […]
bikes: […]
…
@Input bike z
30. Redux for Angular 2
• I use @ngrx/store
• Rob Wormald
• embraces RXJS, select observables from the store
• Especially written for Angular 2
• Has it’s own devtools
• You can reuse all your actions and reducers
34. Only one line of code
@NgModule({
imports: […, StoreModule.provideStore(reducer)]
})
export class AppModule {
}
Use StoreModule.provideStore to register with Angular
...
export class ApplicationContainer {
constructor(private store: Store<ApplicationState>) {
}
}
It’s available everywhere if you inject “Store”