Redux和Reducer中访问不同的reducer,如何?
所以,我有一个应用程序有多个减速器,并因此多个动作创建者相关联。Redux和Reducer中访问不同的reducer,如何?
有一次,我的一个减速器更新状态(因为编辑),因此,我必须确保其他减速器看到此更新并相应地调整其状态。
认为它就好像用户选择“运动鞋”,并且此状态管理位于名为productsReducer的reducer中。因此,当用户移动应用程序进程时,他们会获得与其相关联的优惠券Redirect ...但用户可以随时“编辑”,因此如果他们随后编辑“运动鞋”并说,选择另一个制作人,我必须能够实时更改优惠券Redecer,因为进度模式需要反映这一点。我可以通过流向优惠券页面来做到这一点,因为在该页面上,我只是调和componentWillMount上的数据...但是,我有一个进度模式,并且在进入优惠券页面之前,用户可以打开进度模式...并且这里会有一个错位...
长时间啰嗦我知道,我只是想解释我的情况。
因此,我希望能够从productsReducer中调用“其他减速器”或其动作创建者。
这里的中间件是否适合我在哪里嗅探某个“action.type”,如果我看到它,我可以派发其他action.type或者有没有办法从productsReducer内部调用动作创建器?
导入:import *作为'./couponsActions'的优惠券和我需要的任何其他操作似乎不合适。
基于应用程序状态更新状态是一种反模式。解决方案更简单:
如果某个操作影响多个还原器,请在关注的还原器中订阅该操作。
因此,当用户选择sneakers
,触发此动作
{ type: 'item_select', payload: 'sneakers' }
,然后在couponsReducer
,有这样的事情:
function (state == initialState, action) {
if (action.type == 'item_select') {
return { ...state, activeProduct: action.payload);}
}
return state;
}
你不想级联更新,其中状态取决于其他状态在改变。你想要一个简单的调度体系结构,其中一个动作同时影响所有内容。
在很多情况下,处理多个reducer中的相同操作就足够了(这是官方建议的redux操作方式)。所以总是先试试这个解决方案。
在更复杂的情况下,您可以使用一些库。例如使用redux-saga你能处理这样的:
function* watchItemSelect() {
while(true) {
// Wait for the action you are interested in
const action = yield take('ITEM_SELECT');
// Send another action
yield put({type: 'OTHER_ACTION'})
// The loop will now continue and wait until the next ITEM_SELECT action comes
}
}
也有做同样的事情,但有点不同的其他库。他们中的大多数灵感来自榆树的语言:
而且这种回购提供有关在上述图书馆的思考一些信息:
真棒。我主要关注的是保持在适当的范式内而不是反模式。我能够按照我的需要有效地完成我所需要的工作,就像您建议的那样。万分感谢。 –
“基于应用程序状态更新状态是一种反模式”?这没有任何意义。 Reducer功能的重点在于您根据*当前状态*和行动来做出决定。 – markerikson
@markerikson不,减压器是为了处理动作,而不是状态的变化。状态的变化应始终是行动的结果。创建操作作为被调度操作的结果是一种反模式。 –