Прежде всего вы должны инициализировать ваши «Редукторы» в «app.module.ts».
import { NgModule } from '@angular/core';
import { StoreModule } from '@ngrx/store';
import { AppComponent } from './app.component';
import { Reducers } from './store/app.reducers';
@NgModule({
declarations: [
AppComponent
],
imports: [
StoreModule.forRoot(Reducers)
],
bootstrap: [AppComponent]
})
export class AppModule { }
Затем вы должны поместить все ваши «Редукторы» в «ActionReducerMap».Это универсальный тип, и нет нужды говорить, что вы должны передать интерфейс с действиями в файл app.reducers.ts.Посмотрите код ниже.
import { ActionReducerMap } from '@ngrx/store';
import * as shoppingList from '../shopping-list/store/shopping-list.reducers';
export interface AppState{
shoppingList: shoppingList.State,
}
export const reducers: ActionReducerMap<AppState> = {
shoppingList: shoppingList.shoppingListReducer
}
Затем вы можете создать «Reducer» и передать «State» и «Action», возможно, в файл «shopping-list.reducers.ts»
import * as productListActions from './shopping-list.actions';
import { Product } from '../product/product.model';
export interface State{
products: Product[];
}
const initialState: State = {
products: [
new Product('PC', 5),
new Product('OS', 10),
]
};
export function shoppingListReducer(state = initialState, action: productListActions.ProductListActions){
switch(action.type){
case productListActions.ADD:
return {
...state,
products: [...state.products, action.payload]
};
default:
return state;
}
}