ngrx/store 如何创建依赖的 reducer

ngrx/store How to create dependent reducers

我是 redux 的新手,尤其是 ngrx/store。我找不到关于这个主题的例子,我希望你们能给我指明正确的方向。 我想要实现的是一个名为 freedownloads 的组件,它分派一个操作,该操作应该更新另一个名为 counter 的组件的状态。特别是布尔值 canDownload。目前我有 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;
   }
}

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

您的操作应该在 reducer 之间共享,因为 ngrx 只有一个存储,它是所有在 provideStore 注册的 reducer 的组合。您只需在两个 reducer 中检查该操作名称,然后为每个状态切片执行所需的逻辑。这就是为什么每个 reducer 需要 return 作为默认状态,当没有动作匹配 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;
  }
}