【发布时间】:2017-05-22 15:35:05
【问题描述】:
我刚开始使用 redux,想知道是否有一种 clean 方式来使用多个 reducer。更具体地说,我想知道是否有一种方法可以指定我希望向哪个减速器发送操作
示例)假设我有两个减速器:userReducer、postReducer
用户缩减器
export function userReducer(state: User, action: Action) {
switch (action.type) {]
case SOME_ACTION:
return state;
default:
return state || new User();
}
}
后减速器
export function postReducer(state: Post, action: Action) {
switch (action.type) {]
case SOME_OTHER_ACTION:
return state;
default:
return state || new Post();
}
}
由
初始化StoreModule.provideStore({user: userReducer, post: postReducer}),
我希望能够调用类似的东西
const store = this._store.select<User>('user');
store.dispatch({type: SOME_ACTION, payload: {blah: 'blah'}})
并且只调用 userReducer。
目前,当我发送一个动作时,userReducer 和 postReducer 都会更新它们的状态。这是 redux 工作的事实上的方式吗?
如果没有,有没有一种干净的方法来实现这一点?每次调度都会更新所有 reducer,这似乎很奇怪。
更新
我问这个问题是因为下面的部分。
default:
return state || new User();
通过检查状态是否为空来返回默认值似乎不是一个好习惯。我希望能够做到以下几点。
default:
return new User();
目前我不能这样做,因为如果我调度 SOME_ACTION,postReducer.default 和 userReducer.SOME_ACTION 都将被调用。
不仅如此,我还可以想象如果我不小心为两个减速器创建了一个具有相同字符串的操作,因为它们都会被调用,那么调试将是一场噩梦。
【问题讨论】:
-
能否请您具体说明一下为什么每次调度都会调用每个reducer?您是否有与这种行为有关的特定问题,或者您只是认为这很奇怪?我问,因为答案可能只是“redux 就是这样工作的”,或者是更深层次的误解。
标签: angular typescript redux ngrx