来自 ngrx/store 的 Reducer 不会触发

Rad*_*iac 5 typescript redux angular ngrx-store

combineReducers在一个"@angular/core": "4.4.3""@ngrx/store": "4.0.3"项目中在调度操作后我遇到了减速器没有被拾取的问题。

这可能只是我有限的经验 ngrx/store

整个项目可以在这里看到https://github.com/raduchiriac/workflow

app.module.ts

import { AppStore } from './app.store'

@NgModule({
  imports: [
    StoreModule.forRoot(AppStore),
    ...
  ],
  providers: [
    ...
  ]
})
Run Code Online (Sandbox Code Playgroud)

应用商店.ts

import { createSelector } from 'reselect';
import * as ModalsReducer from "./store/reducers/modals.reducer";

export interface AppState {
  modals: ModalsReducer.State,
}

const metaReducer: ActionReducer<AppState> = combineReducers({
  modals: ModalsReducer.reducer,
});

export function AppStore(state: any, action: any) {
  return metaReducer(state, action);
}
Run Code Online (Sandbox Code Playgroud)

modals.reducer.ts

import * as ModalsActions from '../actions/modals.actions';

export interface State {
  triggerAdd: boolean;
}

const initialState: State = {
  triggerAdd: false,
};

export function reducer(state = initialState, { type, payload }): State {
  switch (type) {
    case ModalsActions.MODALS_TRIGGER_ADD_CLOSE : {
      return Object.assign({...state}, {
        triggerAdd: false
      });
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

triggers.component.ts

addNew() {
  this.store.dispatch(new ModalsActions.OpenTriggerAddAction());
}
...
Run Code Online (Sandbox Code Playgroud)

编辑:商店工作的唯一方法就是这样做。为什么?

app.module.ts

import { AppStore, reducers } from './app.store'
...
imports: [
  StoreModule.forRoot(reducers, {}),
]
Run Code Online (Sandbox Code Playgroud)

amu*_*amu 5

看起来您应该查看ngrx v4的迁移指南

v4 改变了您注册减速器的方式。

StoreModule.forRoot(reducers, {})有效,因为StoreModule.forRoot需要类型为 的对象ActionReducerMap<T, V>。第二个参数:{} - 是初始状态。