有两个独立的组件,有自己的Flux实例,有没有办法共享一个Flux商店?

时间:2016-06-16 18:53:44

标签: reactjs flux reactjs-flux fluxible react-dom

假设我有两个反应组件。

组件A是网站所有者可以添加到其网站的电子商务商店。这包含商店产品,网站访问者可以选择要添加到购物车的商品。

组件B是购物车组件,网站所有者可以选择添加到其网站的标题中。

我想解决的基本用例如下:

  1. 用户访问该网站并将商品添加到购物车
  2. 组件A执行更新共享购物车商店的操作
  3. 此购物车商店警告组件B进行更改
  4. 组件B通过从购物车商店
  5. 获取新购物车信息来更新其状态
  6. 新计数会反映在标题
  7. 在网站上,A和B等组件被称为“插件”。当主站点呈现其页面时,它将运行一个要在页面上呈现的插件列表。每个插件彼此独立。

    我的问题是,有没有办法让其中两个插件传递到同一个商店,或订阅同一个商店,而不与主要的父组件进行交互?

    如果无法做到这一点,我的下一个解决方案是将组件A和B放在容器组件X中.X将是一个包含状态和业务逻辑的提供者。 A和B只包含视图逻辑。 X将呈现为插件,但在页面上不可见,并管理A和B的状态。

    如果我采用这种容器方法,有没有办法从容器中提取A和B,这样我们可以在它们链接到同一个商店后独立呈现它们?

1 个答案:

答案 0 :(得分:0)

我使用ReactJS使用Reflux或Redux(我推荐更多)做了类似的事情。

基本上我会将购物车和电子商务商店分成两个与Redux商店直接联系的智能或容器组件。

在Redux中,我们有一个数据存储,但我们可以有多个reducer(商店内部基本上是不可变的对象)。

这将是流程:

1)用户通过单击产品将产品添加到购物车。 2)组件A发送更新购物车的操作 3)Redux商店更新了购物车项目,这会触发购物车向组件B添加新项目,因为我们刚刚向商店添加了一个新对象。 this.state = {shoppingCartItems:[{id:1,name:item1,price:$ 29.00}]}

基本上,在Redux中,您将在一个商店中拥有两个reducer。一个用于商店(跟踪所有产品)和一个用于购物车(跟踪所有当前添加的项目)。

这是另一个Redux示例,您可以从购物车示例中获取灵感

https://github.com/reactjs/redux/tree/master/examples/shopping-cart