我们正在使用RXJS和Redux的Angular 4项目进行状态管理。 目前我们正在开发一个向导功能。 该向导包括5个步骤,每个步骤都是他自己的反应形式,每个步骤都有子减速器来处理他自己的状态。
WizrdReducer:
{
error: <handled by HOR>
pending: <handled by HOR>
warning: <handled by HOR>
settings: <handled by sub-reducer>
step1Subreducer: <handled by sub-reducer>
step2Subreducer: <handled by sub-reducer>
step3Subreducer: <handled by sub-reducer>
step4Subreducer: <handled by sub-reducer>
step5Subreducer: <handled by sub-reducer>
}
每个步骤都会调度一个在表单中保存表单值的操作。 向导组件在最后一步执行保存操作,保存操作应从状态(所有子减少器)收集所有值,并执行REST操作以创建对象。 我们阅读了很多关于getstate()函数的文章,我们不应该用它来获取状态(反模式,你也这么认为吗?)。 我们当前的解决方案是订阅状态中的每个子reducer(step1SubReducer,Step2SubReducer)并将这些值分配给向导组件内的变量,但它看起来像一个变通方法,即使我们只需要它也会导致许多订阅触发事件在我们的最后一步。 有什么建议吗?
谢谢!
答案 0 :(得分:0)
你可以将所有组合成一步减速器,当你离开一个步骤就可以取消订阅它
stepReducer=(state={steps:[{step1...},{step2...}]},action)=>{
const {payload,type}=action
const {step,data}=payload
payload.data
switch(action.type):
case 'UPDATE_FORM':
...
}