React / redux,显示多个组件,共享相同的动作,但状态不同
假设我有一个可重复使用的容器。这是一个具有多个页面的向导。
向导状态由redux / actions驱动。当一个动作被触发时,我使用一个reducer来更新我的状态。
如果我想复制多个向导并使用自己的状态怎么办?
我认为必须有一种方法可以使某个动态化简器(可以创建/销毁)来处理动作,然后使每个单独的向导从这些动态的存储状态中被驱动。
推荐这个吗?是否有图书馆使这更容易?
回答:
只需将您的主要状态划分为所需的多个向导状态,并随每个操作一起发送一个向导ID,以便您的reducer知道要解决的状态。
作为数组
{ wizards: [
{ id: 'A', state: true },
{ id: 'B', state: false },
{ id: 'C', state: true }
]
}
您可以编写一个向导精简器,该精简器了解如何精简单个向导状态。
function wizardReducer(wizard, action) { switch(action) {
case 'TOGGLE':
return {
id: wizard.id,
state: !wizard.state
};
default:
return wizard;
}
}
然后编写一个wizardsReducer
,了解如何减少向导列表。
function wizardsReducer(wizards, action) { return wizards.map(function(wizard) {
if(action.id == wizard.id) {
return wizardReducer(wizard, action);
} else {
return wizard;
}
});
}
最后,使用combineReducers
来创建根简化程序,该wizards
属性将对此属性的责任委派给this wizardsReducer
。
combineReducers({ wizards: wizardsReducer
});
作为对象
如果要将向导存储在一个对象中,则必须以wizardsReducer
稍微不同的方式构造。
{ wizards: {
A: { id: 'A', state: true },
B: { id: 'B', state: false },
C: { id: 'C', state: true }
}
}
映射状态并没有多大意义,当我们可以直接选择需要的状态时。
function wizardsReducer(wizards, action) { if(!(action.id in wizards)) return wizards;
const wizard = wizards[action.id];
const updatedWizard = wizardReducer(wizard, action);
return {
...wizards,
[action.id]: updatedWizard
};
}
以上是 React / redux,显示多个组件,共享相同的动作,但状态不同 的全部内容, 来源链接: utcz.com/qa/422987.html