ngrx / store如何创建依赖的reducer

时间:2016-08-23 17:40:15

标签: angular redux state reducers ngrx

我对redux,特别是ngrx / store非常陌生。我无法找到关于这个主题的例子,我希望你们能指出我正确的方向。 我想要实现的是一个名为freedownloads的组件,它调度一个应该更新另一个名为counter的组件状态的动作。特别是布尔值可以下载。目前我有2个减速器。我应该使用combineReducers吗?你有什么例子吗? 我使用的是最新版本的ngrx / store(2.1.2)

非常感谢!

//counter.ts
...
export const counter = (state: CounterState = initialState, action: Action) => {
  switch (action.type) {
    case DECREMENT:
      let isZero:boolean = (state.counter - 1) > 0;
      return Object.assign({}, state, {
        counter: state.counter - 1,
        canDownload: isZero
      });
    case INCREMENT:
      return Object.assign({}, state, {
        counter: state.counter + 3,
        canDownload: true
      });

    default:
      return state;
  }
}


//freedownloads.ts
...
export const freedownloads = (state: boolean = false, action: Action) => {

  switch (action.type) {
    case ENABLE:
      return true;
    case DISABLE:
      return false;
    default:
      return state;
   }
}

1 个答案:

答案 0 :(得分:1)

假设我理解你的问题......

您的操作应该在reducers之间共享,因为ngrx只有一个商店,它是使用provideStore注册的所有reducer的组合。您只需在两个Reducer中检查该操作名称,然后为每个状态切片执行所需的逻辑。这就是为什么每个reducer都需要返回默认情况下当没有动作匹配switch case值时传入的状态。

所以我猜你的代码必须是这样的。

export const counter = (state: CounterState = initialState, action: Action) => {
  switch (action.type) {
    case DECREMENT:
      let isZero:boolean = (state.counter - 1) > 0;
      return Object.assign({}, state, {
        counter: state.counter - 1,
        canDownload: isZero
      });
    case ENABLE:
      return Object.assign({}, state, {
         canDownload: true
      });
    case INCREMENT:
      return Object.assign({}, state, {
    counter: state.counter + 3,
    canDownload: true
  });

default:
  return state;
  }
}