【发布时间】:2017-10-09 19:34:14
【问题描述】:
我在同一页面上呈现了同一组件的多个实例。这些组件中的每一个都具有相同的行为并调用相同的操作。调用的操作是异步的,并等待来自 API 的响应(之后会创建更多操作,以便商店可以使用响应)。
如果从这些组件之一触发操作,则该组件需要独立处理最终响应,与它的同级组件分开。
例如:
- 在一个页面上呈现三个相同的按钮
- 单击按钮将创建一个异步查询 API 的操作并使用响应的有效负载分派一个新操作 (true)
- 收到此响应后,点击的按钮需要变为蓝色
- 未点击的按钮必须不受影响。
我将如何以 React/Flux 方式实现这个简单的示例?
想到的直接解决方案是为组件分配一个唯一标识符,将该 ID 与操作一起传递,并在商店中侦听该特定 ID 以指示该变蓝了。
另一种解决方案是将每个渲染组件中的“颜色”状态提升到它们的容器,并将其镜像到存储中(即,在存储中具有 button1Color、button2Color、...)。缺点是任何添加的按钮都需要在 store 中有自己的状态变量(更脆弱!)。这是更好的选择吗?
有没有更好的办法?
Flux store emitting changes to specific react components rather than all components. 也有人问过这个问题,但我认为没有明确或令人满意的答案。
编辑:更多资源:
【问题讨论】:
-
我的第一个解决方案看起来像 Fluxxor 的(旧的?)way of handling this issue,而第二种方法是 Facebook 推荐的标准容器组件策略12