如何过滤传递到ReactRedux的嵌套组合减速器的数据?

时间:2019-04-12 11:05:57

标签: reactjs redux react-redux

我的状态包含一个字段“ mods”,它是一个javascript对象的列表,其中包含一个字段“ elements”,它本身是(出于示例目的)字符串的列表:

state = {
  mods: [
    {
       elements: [
         'Element 1',
         'Element 2'
       ],
       ...
    },
    ...
  ],
  ....
}

通过CombineReducers,我从状态的其余部分切出了mod,从而获得了mod本身的列表,然后再次从其余的mod对象中切出了元素。

const ElementReducer = function(state, action) {...}
const ModReducer = combineReducers({
  elements: ElementReducer,
  ...
});
const reducer = combineReducers({
  mods: ModReducer,
  ...
});

当我尝试将操作应用于元素列表时出现问题;以下动作

const action = {
  type: 'ADD_MOD_ELEMENT',
  mod_id: 1
};

显然应该向mod中添加一个具有id为1的元素,但是当我进入ElementReducer的那一刻,状态是一个简单的字符串数组,无法理解它属于哪个mod。

是否有一种方法可以根据操作的内容来决定是否为某个对象调用reducer?

到目前为止,作为解决方案,我已经看到:

  1. 状态对象的规范化;如果可能的话,我宁愿不要,因为当前结构恰好是我用来与我的REST API通信的结构

  2. 不要编写ModReducer,不要在一个函数中处理所有动作(这是我当前正在采用的解决方案),但是我并不满意。

0 个答案:

没有答案