我的状态包含一个字段“ 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?
到目前为止,作为解决方案,我已经看到:
状态对象的规范化;如果可能的话,我宁愿不要,因为当前结构恰好是我用来与我的REST API通信的结构
不要编写ModReducer,不要在一个函数中处理所有动作(这是我当前正在采用的解决方案),但是我并不满意。