0

我对 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;
   }
}
4

1 回答 1

1

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

您的操作应该在 reducer 之间共享,因为 ngrx 只有一个 store,它是所有在 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;
  }
}
于 2016-08-29T12:38:37.883 回答