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