我有一个应用程序,用户可以在其中构建“引用”。到目前为止,我一直坚持“惯用”的redux(或接近它的东西)并且它一直运作良好。
但是,我正在努力处理一个相当简单的场景:
首次打开页面时,我会触发一个异步LOAD
事件,该事件从构建报价所需的服务器检索信息(产品,库存,以前保存的订单项等)。
我需要一些方法才能在首次打开报价时自动将特定订单项添加到报价中。
我已在我的defaultLineItems
有效负载中添加了LOAD
属性,但要触发addLineItem(product, inventory, options)
操作,我需要来自productReducer
,inventoryReducer
的数据,optionsReducer
。 lineItemReducer
可以查看这些defaultLineItems
并尝试适当地设置它的状态,但是这需要通过使用从reducer记忆的“选择器”(EG)聚合的数据来重写通常由动作处理的大量BL。 :违约价格,数量,货币换算等)
我可以想到几种方法来实现这一点,但它们似乎都有点破解(IE在reducer中存储一个标志,表示我需要触发一个动作然后在我的根组件道具更新时运行它)。似乎反应组件不应对此类事物负责。
做这样的事情的正确方法是什么?
答案 0 :(得分:0)
似乎有几种不同的方法可以实现,但对我来说,简单和设计之间最平衡的方法是使用store.subscribe与reducer一起跟踪最后的动作。
最简单的是,这看起来像这样。
store.subscribe(function() {
let state = store.getState();
if(state.lastAction.type === ActionKeys.LOAD){
console.log('load action fired!');
}
})
请注意,从store.subscribe
触发操作会导致递归,因此您需要有选择性。