2017-07-17 97 views
0

我目前有一个问题,我不确定如果我只是没有看到更大的图片(或者可能不这样做),或者如果这是有效的减少... ...React-Redux - 向组件广播一个动作

我有一个固定大小的SVG图表。用户可能会在我的页面上打开一个面板,这会减小图表的宽度。这导致我的图表被压缩。要解决这个问题,图表应该更新维度,以便再次看起来很好。

所以...我有一个组件,用户点击以打开面板。该组件应该触发一个动作,理想情况下是一般的,可重用的,如“rerenderSVG”。我可以使用标准的redux工作流程,并让我的reducer在我的状态中放置一些标志,并让我所有与svg相关的组件都能听到。但这感觉像是过度杀伤。在我的状态下,这是我所不希望的,我只想要一个广播给所有安装组件的动作,例如“嗨,组件,这只是发生了,如果这涉及到你:请做出反应”。

这可以很容易地完成在流量,但在减少...我不知道。这种模式是否能够实施,并仍然符合减排方式?

如果这个问题是如此的平凡以至于已经有成千上万的帖子对不起!但我真的不知道要查找哪些关键字...

回答

0

默认情况下,所有操作都会在flux/redux中广播到所有reducer。您需要在每个要更新状态的减速器中处理该特定操作。

如果您不想更新所有组件,只更新当前显示的组件,则可以使用setState重新呈现该特定组件。

+0

请纠正我,如果我错了,但不是减速机错误的地方,我的问题?就像我说的:我不想改变我的状态。我想要一个行动被派遣/广播到一个组件。所有reducer都可以做的是在我的应用程序状态中添加一个标志,以便我的组件可以监听它。 ...我越想越多,我感觉这不可能以重做的方式完成,但我仍然想问问...... – hurrtz

+0

如果只有一个组件需要知道新的缩小尺寸,那么缩减器可能不是一个好的地方。如果它是多个组件需要知道新的缩小尺寸,那么可能是。我想在流量中直接在组件中订阅并使用setState触发重新渲染,而不是将其保存在商店中。是。在这种意义上你是对的,没有办法在没有实际改变状态的情况下通知组件。你可以写一个redux中间件,但我不认为这是一个很好的解决方案。 –

0

如果我明白了你的意思,所以我认为你完全不需要使用redux。你在找什么是父(通常是容器)组件的本地状态。

为什么不在REDX存储中保存图表渲染其内容所需的原始数据(图形/等的坐标/数据集),但不要放置任何标志或任何与数据相关的数据更改图表框的高度/宽度。 由于redux商店本身存储原始数据,因此数据的形状应该是连接的容器组件的本地状态。一旦数据被“整形”为调整大小的视图,您可以通过道具将其传递到您的“虚拟”展示组件,以便在其中描绘这些数据。我假设你很清楚the difference between smart/dumb or container/presentational components

一旦用户以某种方式(有意或无意)更改图表框的大小,则可以处理该事件resize和运行的功能(例如rerenderCharts),该重新计算数据的形状和成分上调用setState。这将导致组件的所有链在容器大小发生变化时都会被重新渲染。

Here您可以看到一些示例,了解如何在组件级别处理调整大小事件。

希望这一切都有道理。