Я использую ngrx / store в своем приложении, и мне не удается сохранить массив. Мой массив становится пустым при запуске с помощью:
export interface AppState{
customObjects: Array<CustomObject>;
};
export const initialState: AppState = {
customObjects: []
};
и я пытаюсь вручную передать ему массив из двух CustomObject, используя следующую функцию:
loadCustomObjects() {
let initialItems: CustomObject[] = [
{
directoryName: "d_name_1",
brokenLinks: 0,
},
{
directoryName: "d_name_2",
brokenLinks: 0,
}
];
this.appStore.dispatch({ type: LOAD_CUSTOM_OBJECTS, payload: initialItems });
}
Вызов этой функции отправляет вызов моей функции редуктора:
export const mainReducer: ActionReducer = (состояние: AppState, действие: Действие) => {
if (typeof state == 'undefined') {
state = initialState;
}
switch (action.type) {
case LOAD_CUSTOM_OBJECTS:
return Object.assign({}, action.payload)
default: {
return state;
}
}
}
Кажется, все в порядке, но в массиве моего основного компонента приложения эти два объекта отсутствуют. Если я вручную установил состояние по умолчанию для этих двух CustomObject, тогда он заработает (я не могу этого сделать, так как мне нужно иметь возможность обновлять массив, когда я хочу). My HomeComponent использует:
customObjects$ Observable<Array<CustomObject>>;
constructor(private appStore: Store<AppState>) {
appstore.select('mainReducer')
.subscribe((data: AppState) => {
if (typeof data != 'undefined') {
this.customObjects$ = Observable.of(data.customObjects);
}
});
}
Я проанализировал свои объекты и ожидаю увидеть, что this.customObjects $ в конечном итоге окажется массивом из двух CustomObject. Вместо этого это ScalarOservable:
ScalarObservable {_isScalar: true, value: undefined, scheduler: null} и т. Д. И т. Д.
Примечание. Я не уверен, нужно ли мне это, но я включил ChangeDetectionStrategy.onPush в раздел @Component моего домашнего компонента. Я также обязательно использовал
StoreModule.provideStore({ mainReducer })
в моем классе app.module.
Кто-нибудь знает, что я делаю неправильно и почему this.customObjects $ не является массивом из двух объектов? Я новичок в ngrx / store - я чувствую, что есть проблема с тем, как моя функция редуктора устанавливает массив, но я не уверен.