[redux] 一个 action => 多个 reducers , view 中 可以指定 执行某一个 reducers 吗?

2016-01-22 11:40:32 +08:00
 chend

假如有一个 action :
export function add() {
return {type: 'ADD'}
}

多个 reducers 都可以处理这个 action:
`
export function reducer1(state = initialState, action) {
switch (action.type) {
case 'add':
return state + 1
default:
return state
}
}

export function reducer2(state = initialState, action) {
switch (action.type) {
case 'add':
return state + 2
default:
return state
}
}
`
在 view 中, 可以 指定执行 某一个 reducers 吗?

2654 次点击
所在节点    问与答
7 条回复
FrankFang128
2016-01-22 13:00:58 +08:00
前端什么时候也要为设计模式所苦恼了
hienchu
2016-01-22 13:07:54 +08:00
reducer 只负责更新数据, view 反应数据的变化,所以应该不需要关心 reducer 的存在,可以考虑把 action 细分
hxtheone
2016-01-22 13:39:45 +08:00
Redux 里对于一个 action 每个 reducer 都会跑一遍,有定义的话更新数据,没有定义就返回原有 state ,指定 reducer 从源码里看感觉找不到方法,还是按照 LS 说的把 action 区分一下吧
chend
2016-01-22 13:52:34 +08:00
@hienchu
@hxtheone

试验过了, bindActionCreators 后,一个 action.type 都会执行, 文档上没直接看到可以 区分 reducers 的。。
只是在想, 如果遇到 功能类似的多个组件, 如果 action 细分好蛋疼。。或者通过一个用于区分 reducers 的固定参数 来调用 action{return {type:'add', reducers:'reducers1[2]'}} 这种~~ 同样蛋疼
Niphor
2016-01-23 14:18:25 +08:00
所以人家的 type 都是'some/module/some/action/some/opt'的超长字符串吧...
chend
2016-01-23 18:24:55 +08:00
@Niphor
这种字符串 太长 可读性也 太不友好了。。 试过了, 可以像我 4L 说的 那样。。多传一个参数来判断。。 只不过,要区分的 reducers 中 也需要 更新对应的判断
nianjcn
2016-03-01 21:41:18 +08:00
flux 里面的 action 有 source 这个字段来标示 action 由哪个 view 触发的吧,不过反正 action 都是 plain object ,你自己随便定义吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/252565

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX