chend
V2EX  ›  问与答

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

  •  
  •   chend · Jan 22, 2016 · 4167 views
    This topic created in 3938 days ago, the information mentioned may be changed or developed.

    假如有一个 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 吗?

    7 replies  •  2016-03-01 21:41:18 +08:00
    FrankFang128
    FrankFang128
    Jan 22, 2016 via Android
    1
    前端什么时候也要为设计模式所苦恼了
    hienchu
    hienchu
    Jan 22, 2016 via iPhone
    2
    reducer 只负责更新数据, view 反应数据的变化,所以应该不需要关心 reducer 的存在,可以考虑把 action 细分
    hxtheone
    hxtheone
    Jan 22, 2016
    3
    Redux 里对于一个 action 每个 reducer 都会跑一遍,有定义的话更新数据,没有定义就返回原有 state ,指定 reducer 从源码里看感觉找不到方法,还是按照 LS 说的把 action 区分一下吧
    chend
    chend
    OP
    Jan 22, 2016
    4
    @hienchu
    @hxtheone

    试验过了, bindActionCreators 后,一个 action.type 都会执行, 文档上没直接看到可以 区分 reducers 的。。
    只是在想, 如果遇到 功能类似的多个组件, 如果 action 细分好蛋疼。。或者通过一个用于区分 reducers 的固定参数 来调用 action{return {type:'add', reducers:'reducers1[2]'}} 这种~~ 同样蛋疼
    Niphor
    Niphor
    Jan 23, 2016
    5
    所以人家的 type 都是'some/module/some/action/some/opt'的超长字符串吧...
    chend
    chend
    OP
    Jan 23, 2016
    6
    @Niphor
    这种字符串 太长 可读性也 太不友好了。。 试过了, 可以像我 4L 说的 那样。。多传一个参数来判断。。 只不过,要区分的 reducers 中 也需要 更新对应的判断
    nianjcn
    nianjcn
    Mar 1, 2016
    7
    flux 里面的 action 有 source 这个字段来标示 action 由哪个 view 触发的吧,不过反正 action 都是 plain object ,你自己随便定义吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5259 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 218ms · UTC 02:48 · PVG 10:48 · LAX 18:48 · JFK 21:48
    ♥ Do have faith in what you're doing.